2011-04-18 3 views
53

Załóżmy, że mam tabelę SQL, która ma pole varchar [1000] o nazwie "Uwagi".Jak uzyskać rozmiar pola varchar [n] w jednym zapytaniu SQL?

Chciałbym stworzyć pojedyncze zapytanie SQL, które po uruchomieniu zwróci 1000 lub cokolwiek zmieni się rozmiar pola varchar w przyszłości.

Coś takiego jak SELECT size(Remarks) FROM mytable.

Jak to zrobić?

+0

To będzie zależeć od RDBMS, nad którym pracujesz. Ale Neil powiedział, że możesz szukać w systemie informacyjnym twojego serwera. –

Odpowiedz

83
select column_name, data_type, character_maximum_length  
    from information_schema.columns 
where table_name = 'myTable' 
+7

możesz podać dodatkową klauzulę 'AND column_name = 'Remarks'' jeśli chcesz odfiltrować tylko jedną kolumnę. –

+1

Po prostu FYI, to zapytanie specyficzne dla MySQL. – pickypg

+1

Jednak nie działa w Oracle. – pickypg

21

na SQL Server konkretnie:

SELECT DATALENGTH(Remarks) AS FIELDSIZE FROM mytable 

Documentation

+2

Ta instrukcja zwraca długość danych, które zostały już wprowadzone. Chcę mieć rozmiar danych przechowywanych w polu. –

+0

Ups - powinienem uważniej czytać pytania w przyszłości! – MarcE

+1

Jeśli umieścisz kod, XML lub próbki danych, ** proszę ** podświetl te linie w edytorze tekstu i kliknij przycisk "próbki kodu" ('{}') na pasku narzędzi edytora, aby ładnie sformatować i podświetlić składnię! –

2

Szukałem całkowity rozmiar kolumny i uderzyć ten artykuł, moje rozwiązanie jest oparte off Marce jest.

SELECT sum(DATALENGTH(your_field)) AS FIELDSIZE FROM your_table 
0

Gdzie jest funkcja obliczania długości max ważny dla varchar (NN):

CREATE FUNCTION [dbo].[GetMaxVarcharColumnLength] (@TableSchema NVARCHAR(MAX), @TableName NVARCHAR(MAX), @ColumnName VARCHAR(MAX)) 
RETURNS INT 
AS 
BEGIN 
    RETURN (SELECT character_maximum_length FROM information_schema.columns 
      WHERE table_schema = @TableSchema AND table_name = @TableName AND column_name = @ColumnName); 
END 

Zastosowanie:

IF LEN(@Name) > [dbo].[GetMaxVarcharColumnLength]('person', 'FamilyStateName', 'Name') 
      RETURN [dbo].[err_Internal_StringForVarcharTooLong](); 
3

To będzie działać na SQL Server ...

SELECT COL_LENGTH('Table', 'Column') 
+0

Warto zauważyć, że zwróci to długość w * bajtach *, więc będziesz musiał na przykład zmniejszyć o połowę wartość dla 'NVARCHAR' lub' NCHAR'. Zobacz https://docs.microsoft.com/en-us/sql/t-sql/functions/col-length-transact-sql –

0

Dla t-SQL używam następującego zapytania dla var Kolumny Char (pokazuje zestawianie i właściwości is_null):

SELECT 
    s.name 
    , o.name as table_name 
    , c.name as column_name 
    , t.name as type 
    , c.max_length 
    , c.collation_name 
    , c.is_nullable 
FROM 
    sys.columns c 
    INNER JOIN sys.objects o ON (o.object_id = c.object_id) 
    INNER JOIN sys.schemas s ON (s.schema_id = o.schema_id) 
    INNER JOIN sys.types t ON (t.user_type_id = c.user_type_id) 
WHERE 
    s.name = 'dbo' 
    AND t.name IN ('varchar') -- , 'char', 'nvarchar', 'nchar') 
ORDER BY 
    o.name, c.name 
0
select column_name, data_type, character_maximum_length  
from INFORMATION_SCHEMA.COLUMNS 
where table_name = 'Table1' 
3

Dla SQL Server (2008 i nowsze):

SELECT COLUMNPROPERTY(OBJECT_ID('mytable'), 'Remarks', 'PRECISION'); 

COLUMNPROPERTY zwraca informacje dla kolumny lub parametru (id, kolumna/parametr, właściwość). Właściwość PRECISION zwraca długość typu danych kolumny lub parametru.

COLUMNPROPERTY documentation