Hvis du nogensinde har brug for at få en liste over datatyper i SQL Server, kan du bruge en af systemvisningerne til at gøre netop det.
Især kan du bruge sys.types
systemkatalogvisning. Denne visning returnerer alle systemleverede og brugerdefinerede datatyper defineret i databasen. Hvis du bruger SQL Server 2000 sys.systypes
burde gøre tricket.
Eksempel 1 – sys.types
Vis
sys.types
view er den bedste at bruge, hvis du bruger en version af SQL Server, der er nyere end SQL Server 2000.
Den hurtigste/nemmeste måde at bruge sys.types
på visning er at vælge alt. I så fald kan din kode se sådan ud:
SELECT * FROM sys.types;
Dette returnerer dog en masse kolonner, som du måske eller måske ikke er interesseret i. Du kan indsnævre det til kun de kolonner, du er interesseret i.
Her er et eksempel på valg af nogle kolonner af interesse:
SELECT name, max_length, [precision], scale, is_user_defined FROM sys.types;
Resultat:
+------------------+--------------+-------------+---------+-------------------+ | 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 | +------------------+--------------+-------------+---------+-------------------+
Disse er datatyperne i den aktuelle database. Hvis du skifter til en anden database, kan du få forskellige resultater (dette vil i høj grad afhænge af, om der er defineret nogen brugerdefinerede datatyper eller aliasdatatyper, og om de er forskellige mellem databaserne eller ej).
Eksempel 2 – Alias og brugerdefinerede datatyper
I det foregående eksempel inkluderede jeg koden is_user_defined
kolonne. Vi kan se, at ingen af datatyperne er brugerdefinerede eller aliasdatatyper, fordi de alle har 0
som deres værdi.
Lad os oprette en aliasdatatype og derefter se, hvordan den vises i resultaterne.
Opret aliasdatatypen:
CREATE TYPE SSN FROM varchar(11) NOT NULL;
Lad os nu køre forespørgslen igen.
SELECT name, max_length, [precision], scale, is_user_defined FROM sys.types;
Resultat:
+------------------+--------------+-------------+---------+-------------------+ | 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 | +------------------+--------------+-------------+---------+-------------------+
Den nye datatype vises (nederst). Den har også en værdi på 1
i is_user_defined
kolonne.
sys.systypes
Vis
Der er også en sys.systypes
systemkompatibilitetsvisning, som kun leveres til bagudkompatibilitet. Dette er fordi systypes
var navnet på en systemtabel i SQL Server 2000, og der kunne være mange ældre systemer derude med kode, der refererer til den tabel.
Microsoft har angivet, at sys.systypes
systemkompatibilitetsvisning vil blive fjernet i en fremtidig version af Microsoft SQL Server, og anbefaler derfor, at du undgår at bruge denne visning i nyt arbejde.
Med andre ord, brug sys.types
i stedet hvis du kan.
Men hvis du stadig bruger en tidligere version af SQL Server, skal du bruge sys.systypes
.
Bemærk, at sys.systypes
indeholder forskellige kolonner/kolonnenavne til sys.types
, så de kolonnenavne, jeg brugte i det forrige eksempel, virker ikke.
Du kan stadig vælge alle kolonner ved hjælp af stjernen (*
) jokertegn dog:
SELECT * FROM sys.systypes;