Als u ooit een lijst met gegevenstypen in SQL Server nodig heeft, kunt u daarvoor een van de systeemweergaven gebruiken.
In het bijzonder kunt u de sys.types
. gebruiken systeemcatalogus bekijken. Deze weergave retourneert alle door het systeem geleverde en door de gebruiker gedefinieerde gegevenstypen die in de database zijn gedefinieerd. Als u SQL Server 2000 sys.systypes
. gebruikt zou het lukken.
Voorbeeld 1 – De sys.types
Bekijk
De sys.types
view is de beste om te gebruiken als u een latere versie van SQL Server dan SQL Server 2000 gebruikt.
De snelste/gemakkelijkste manier om de sys.types
. te gebruiken weergave is om alles te selecteren. In dat geval kan uw code er als volgt uitzien:
SELECT * FROM sys.types;
Dit levert echter veel kolommen op waarin u wel of niet geïnteresseerd bent. U kunt het beperken tot alleen die kolommen waarin u geïnteresseerd bent.
Hier is een voorbeeld van het selecteren van enkele interessante kolommen:
SELECT name, max_length, [precision], scale, is_user_defined FROM sys.types;
Resultaat:
+------------------+--------------+-------------+---------+-------------------+ | 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 | +------------------+--------------+-------------+---------+-------------------+
Dit zijn de datatypes binnen de huidige database. Als u overschakelt naar een andere database, kunt u andere resultaten krijgen (dit hangt grotendeels af van het feit of er door de gebruiker gedefinieerde gegevenstypen of aliasgegevenstypen zijn gedefinieerd en of deze al dan niet verschillen tussen de databases).
Voorbeeld 2 – Alias en door de gebruiker gedefinieerde gegevenstypen
In het vorige voorbeeld heb ik de is_user_defined
kolom. We kunnen zien dat geen van de gegevenstypen door de gebruiker gedefinieerde of aliasgegevenstypen zijn, omdat ze allemaal 0
hebben als hun waarde.
Laten we een alias-gegevenstype maken en dan kijken hoe het in de resultaten wordt weergegeven.
Maak het alias-gegevenstype:
CREATE TYPE SSN FROM varchar(11) NOT NULL;
Laten we de query nu opnieuw uitvoeren.
SELECT name, max_length, [precision], scale, is_user_defined FROM sys.types;
Resultaat:
+------------------+--------------+-------------+---------+-------------------+ | 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 | +------------------+--------------+-------------+---------+-------------------+
Het nieuwe gegevenstype verschijnt (onderaan). Het heeft ook een waarde van 1
in de is_user_defined
kolom.
De sys.systypes
Bekijk
Er is ook een sys.systypes
systeemcompatibiliteitsweergave, die alleen is bedoeld voor achterwaartse compatibiliteit. Dit komt omdat systypes
was de naam van een systeemtabel in SQL Server 2000, en er kunnen veel oudere systemen zijn met code die naar die tabel verwijst.
Microsoft heeft aangegeven dat de sys.systypes
systeemcompatibiliteitsweergave wordt verwijderd in een toekomstige versie van Microsoft SQL Server, en daarom raadt u aan deze weergave niet in nieuw werk te gebruiken.
Met andere woorden, gebruik sys.types
in plaats daarvan als je kunt.
Maar als u nog steeds een eerdere versie van SQL Server gebruikt, moet u sys.systypes
gebruiken .
Merk op dat sys.systypes
bevat verschillende kolommen/kolomnamen voor sys.types
, dus de kolomnamen die ik in het vorige voorbeeld heb gebruikt, werken niet.
U kunt nog steeds alle kolommen selecteren met de asterisk (*
) jokerteken echter:
SELECT * FROM sys.systypes;