2012-12-06 12 views
5

dodałem tabelę do bazy danych z następującymi nazwami kolumn i typów danychSQL: Dlaczego SYS.COLUMNS pokazać moje kolumny o różnych właściwościach, niż ustawić

„ID” bigint „Opis” nchar (11)

Jeśli sprawdzam widok projektu tabeli, typy danych kolumn są takie, jak je ustawiam.

Gdybym napisać kwerendę, która dostanie kolumny w tej tabeli z SYS.COLUMNS właściwości kolumn są różne np (the max_length opisu jest 22, a nie 11)

Może ktoś wyjaśnić, dlaczego tak jest?

Używam Microsoft SQL Server Enterprise Edition (64-bit), jeśli jest to istotne.

Odpowiedz

12

Kolumna max_length w sys.columns pokazuje maksymalną długość w bajtach. nchar jest dwubajtowy, więc 11 znaków ma 22 bajty.

Jeśli chcesz liczba znaków można użyć INFORMATION_SCHEMA.COLUMNS

select COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH 
from INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME = 'YourTable' 

Albo można użyć funkcji COLUMNPROPERTY

select name, 
     columnproperty(object_id, name, 'charmaxlen') as charmaxlen 
from sys.columns 
where object_name(object_id) = 'YourTable' 
+0

dziękuję. Przyjmuję twoją odpowiedź, gdy strona mi pozwoli. Jeśli spróbuję uzyskać precyzję kolumny z SYS.COLUMNS, to daje mi ona 0. Czy istnieje sposób na odzyskanie numeru, który ustawiłem w rozmiarze z zapytaniem? EDYCJA: Precyzja jest tylko 0 dla opisu, to 19 dla biginta –

+0

precyzja ma sens tylko dla nieokreślonych typów numerycznych (np. Zmiennoprzecinkowe, dziesiętne). –

Powiązane problemy