Om du någonsin behöver få en lista över datatyper i SQL Server kan du använda en av systemvyerna för att göra just det.
I synnerhet kan du använda sys.types
systemkatalogvy. Denna vy returnerar alla systemlevererade och användardefinierade datatyper definierade i databasen. Om du använder SQL Server 2000 sys.systypes
borde göra susen.
Exempel 1 – sys.types
Visa
sys.types
view är den bästa att använda om du använder en version av SQL Server senare än SQL Server 2000.
Det snabbaste/enklaste sättet att använda sys.types
synen är att välja allt. I så fall kan din kod se ut så här:
SELECT * FROM sys.types;
Detta returnerar dock många kolumner som du kanske eller kanske inte är intresserad av. Du kan begränsa det till bara de kolumner som du är intresserad av.
Här är ett exempel på hur du väljer några kolumner av intresse:
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 | +------------------+--------------+-------------+---------+-------------------+
Dessa är datatyperna i den aktuella databasen. Om du byter till en annan databas kan du få olika resultat (detta beror till stor del på om några användardefinierade datatyper eller aliasdatatyper har definierats, och om de skiljer sig mellan databaserna eller inte).
Exempel 2 – Alias och användardefinierade datatyper
I det föregående exemplet inkluderade jag koden is_user_defined
kolumn. Vi kan se att ingen av datatyperna är användardefinierade eller aliasdatatyper, eftersom de alla har 0
som deras värde.
Låt oss skapa en aliasdatatyp och sedan se hur den visas i resultaten.
Skapa aliasdatatypen:
CREATE TYPE SSN FROM varchar(11) NOT NULL;
Låt oss nu köra frågan 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 nya datatypen visas (längst ned). Den har också värdet 1
i is_user_defined
kolumn.
sys.systypes
Visa
Det finns också en sys.systypes
systemkompatibilitetsvy, som endast tillhandahålls för bakåtkompatibilitet. Detta beror på att systypes
var namnet på en systemtabell i SQL Server 2000, och det kan finnas många äldre system där ute med kod som refererar till den tabellen.
Microsoft har angett att sys.systypes
systemkompatibilitetsvy kommer att tas bort i en framtida version av Microsoft SQL Server, och rekommenderar därför att du undviker att använda denna vy i nytt arbete.
Med andra ord, använd sys.types
istället om du kan.
Men om du fortfarande använder en tidigare version av SQL Server måste du använda sys.systypes
.
Observera att sys.systypes
innehåller olika kolumner/kolumnnamn till sys.types
, så kolumnnamnen jag använde i föregående exempel fungerar inte.
Du kan fortfarande välja alla kolumner med asterisken (*
) jokertecken dock:
SELECT * FROM sys.systypes;