Jeśli kiedykolwiek będziesz potrzebować listy typów danych w SQL Server, możesz użyć jednego z widoków systemowych, aby to zrobić.
W szczególności możesz użyć sys.types
widok katalogu systemowego. Ten widok zwraca wszystkie dostarczone przez system i zdefiniowane przez użytkownika typy danych zdefiniowane w bazie danych. Jeśli używasz SQL Server 2000 sys.systypes
powinien załatwić sprawę.
Przykład 1 – sys.types
Zobacz
sys.types
widok jest najlepszy do użycia, jeśli używasz wersji SQL Server późniejszej niż SQL Server 2000.
Najszybszy/najłatwiejszy sposób użycia sys.types
Widok to zaznaczenie wszystkiego. W takim przypadku Twój kod może wyglądać tak:
SELECT * FROM sys.types;
Zwraca to jednak wiele kolumn, którymi możesz być zainteresowany lub nie. Możesz zawęzić je tylko do tych kolumn, które Cię interesują.
Oto przykład wyboru kilku interesujących kolumn:
SELECT name, max_length, [precision], scale, is_user_defined FROM sys.types;
Wynik:
+------------------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |------------------+--------------+-------------+---------+-------------------| | image | 16 | 0 | 0 | 0 | | text | 16 | 0 | 0 | 0 | | uniqueidentifier | 16 | 0 | 0 | 0 | | date | 3 | 10 | 0 | 0 | | time | 5 | 16 | 7 | 0 | | datetime2 | 8 | 27 | 7 | 0 | | datetimeoffset | 10 | 34 | 7 | 0 | | tinyint | 1 | 3 | 0 | 0 | | smallint | 2 | 5 | 0 | 0 | | int | 4 | 10 | 0 | 0 | | smalldatetime | 4 | 16 | 0 | 0 | | real | 4 | 24 | 0 | 0 | | money | 8 | 19 | 4 | 0 | | datetime | 8 | 23 | 3 | 0 | | float | 8 | 53 | 0 | 0 | | sql_variant | 8016 | 0 | 0 | 0 | | ntext | 16 | 0 | 0 | 0 | | bit | 1 | 1 | 0 | 0 | | decimal | 17 | 38 | 38 | 0 | | numeric | 17 | 38 | 38 | 0 | | smallmoney | 4 | 10 | 4 | 0 | | bigint | 8 | 19 | 0 | 0 | | hierarchyid | 892 | 0 | 0 | 0 | | geometry | -1 | 0 | 0 | 0 | | geography | -1 | 0 | 0 | 0 | | varbinary | 8000 | 0 | 0 | 0 | | varchar | 8000 | 0 | 0 | 0 | | binary | 8000 | 0 | 0 | 0 | | char | 8000 | 0 | 0 | 0 | | timestamp | 8 | 0 | 0 | 0 | | nvarchar | 8000 | 0 | 0 | 0 | | nchar | 8000 | 0 | 0 | 0 | | xml | -1 | 0 | 0 | 0 | | sysname | 256 | 0 | 0 | 0 | +------------------+--------------+-------------+---------+-------------------+
Są to typy danych w aktualnej bazie danych. Jeśli przełączysz się na inną bazę danych, możesz uzyskać różne wyniki (zależy to w dużej mierze od tego, czy zdefiniowano jakiekolwiek typy danych zdefiniowane przez użytkownika lub typy danych aliasów oraz czy różnią się one między bazami danych).
Przykład 2 – Alias i typy danych zdefiniowane przez użytkownika
W poprzednim przykładzie uwzględniłem is_user_defined
kolumna. Widzimy, że żaden z typów danych nie jest zdefiniowany przez użytkownika ani alias, ponieważ wszystkie mają 0
jako ich wartość.
Utwórzmy typ danych aliasu, a następnie zobaczmy, jak wygląda w wynikach.
Utwórz typ danych aliasu:
CREATE TYPE SSN FROM varchar(11) NOT NULL;
Teraz uruchommy zapytanie ponownie.
SELECT name, max_length, [precision], scale, is_user_defined FROM sys.types;
Wynik:
+------------------+--------------+-------------+---------+-------------------+ | name | max_length | precision | scale | is_user_defined | |------------------+--------------+-------------+---------+-------------------| | image | 16 | 0 | 0 | 0 | | text | 16 | 0 | 0 | 0 | | uniqueidentifier | 16 | 0 | 0 | 0 | | date | 3 | 10 | 0 | 0 | | time | 5 | 16 | 7 | 0 | | datetime2 | 8 | 27 | 7 | 0 | | datetimeoffset | 10 | 34 | 7 | 0 | | tinyint | 1 | 3 | 0 | 0 | | smallint | 2 | 5 | 0 | 0 | | int | 4 | 10 | 0 | 0 | | smalldatetime | 4 | 16 | 0 | 0 | | real | 4 | 24 | 0 | 0 | | money | 8 | 19 | 4 | 0 | | datetime | 8 | 23 | 3 | 0 | | float | 8 | 53 | 0 | 0 | | sql_variant | 8016 | 0 | 0 | 0 | | ntext | 16 | 0 | 0 | 0 | | bit | 1 | 1 | 0 | 0 | | decimal | 17 | 38 | 38 | 0 | | numeric | 17 | 38 | 38 | 0 | | smallmoney | 4 | 10 | 4 | 0 | | bigint | 8 | 19 | 0 | 0 | | hierarchyid | 892 | 0 | 0 | 0 | | geometry | -1 | 0 | 0 | 0 | | geography | -1 | 0 | 0 | 0 | | varbinary | 8000 | 0 | 0 | 0 | | varchar | 8000 | 0 | 0 | 0 | | binary | 8000 | 0 | 0 | 0 | | char | 8000 | 0 | 0 | 0 | | timestamp | 8 | 0 | 0 | 0 | | nvarchar | 8000 | 0 | 0 | 0 | | nchar | 8000 | 0 | 0 | 0 | | xml | -1 | 0 | 0 | 0 | | sysname | 256 | 0 | 0 | 0 | | SSN | 11 | 0 | 0 | 1 | +------------------+--------------+-------------+---------+-------------------+
Pojawi się nowy typ danych (na dole). Ma również wartość 1
w is_user_defined
kolumna.
sys.systypes
Zobacz
Istnieje również sys.systypes
widok zgodności systemu, który jest udostępniany tylko w celu zapewnienia zgodności z poprzednimi wersjami. Dzieje się tak, ponieważ systypes
była nazwą tabeli systemowej w SQL Server 2000 i może istnieć wiele starszych systemów z kodem, który odwołuje się do tej tabeli.
Microsoft wskazał, że sys.systypes
widok zgodności systemowej zostanie usunięty w przyszłej wersji programu Microsoft SQL Server, dlatego zaleca się unikanie używania tego widoku w nowych pracach.
Innymi słowy, użyj sys.types
zamiast tego Jeśli możesz.
Ale jeśli nadal używasz wcześniejszej wersji SQL Server, będziesz musiał użyć sys.systypes
.
Zauważ, że sys.systypes
zawiera różne nazwy kolumn/kolumn niż sys.types
, więc nazwy kolumn, których użyłem w poprzednim przykładzie, nie będą działać.
Nadal możesz wybrać wszystkie kolumny za pomocą gwiazdki (*
) symbol wieloznaczny:
SELECT * FROM sys.systypes;