In SQL Server kunt u de TYPE_ID()
. gebruiken functie om de ID van een gegevenstype te retourneren, op basis van de naam. Dit kan handig zijn bij het opvragen van een systeemweergave waarin de ID van een gegevenstype is opgeslagen, maar niet de naam. Het is meestal gemakkelijker om de naam te onthouden. Niet zo gemakkelijk om de ID te onthouden.
U kunt TYPE_ID()
. gebruiken voor systeemgegevenstypen en door de gebruiker gedefinieerde gegevenstypen.
Voorbeeld 1 – Basisgebruik
Hier is een eenvoudig voorbeeld om te laten zien hoe het werkt.
SELECT TYPE_ID('varchar') AS Result;
Resultaat:
+----------+ | Result | |----------| | 167 | +----------+
Dit resultaat vertelt ons dat de varchar gegevenstype heeft een ID van 167.
Voorbeeld 2 – Een databasevoorbeeld
Hier is een voorbeeld van het gebruik van TYPE_ID()
in een WHERE
clausule om de resultaten te filteren op slechts een bepaald gegevenstype.
SELECT o.name AS [Object Name], c.name AS [Column Name], c.user_type_id AS [Type ID], TYPE_NAME(c.user_type_id) AS [Type Name] FROM sys.objects AS o JOIN sys.columns AS c ON o.object_id = c.object_id JOIN sys.types t ON c.user_type_id = t.user_type_id WHERE c.user_type_id = TYPE_ID('varchar');
Resultaat:
+---------------+---------------+-----------+-------------+ | Object Name | Column Name | Type ID | Type Name | |---------------+---------------+-----------+-------------| | Individual | FirstName | 167 | varchar | | Individual | LastName | 167 | varchar | | Occupation | JobTitle | 167 | varchar | | Event | EventName | 167 | varchar | | Scoreboard | Player | 167 | varchar | | Team | TeamName | 167 | varchar | | Client | FirstName | 167 | varchar | | Client | LastName | 167 | varchar | | Colors | ColorName | 167 | varchar | +---------------+---------------+-----------+-------------+
Je zult zien dat ik ook TYPE_NAME()
. gebruik in dit voorbeeld om de naam te retourneren op basis van zijn ID.
Voorbeeld 3 – Door de gebruiker gedefinieerde typen
U kunt ook TYPE_ID()
. gebruiken voor door de gebruiker gedefinieerde typen. Hier is een voorbeeld dat een door de gebruiker gedefinieerd type alias in de resultaten bevat.
SELECT o.name AS [Object Name], c.name AS [Column Name], c.user_type_id AS [Type ID], TYPE_NAME(c.user_type_id) AS [Type Name], CASE WHEN t.is_user_defined = 1 THEN 'Yes' ELSE 'No' END AS [User Defined?] FROM sys.objects AS o JOIN sys.columns AS c ON o.object_id = c.object_id JOIN sys.types t ON c.user_type_id = t.user_type_id WHERE c.user_type_id = TYPE_ID('varchar') OR c.user_type_id = TYPE_ID('clientcode');
Resultaat:
+---------------+---------------+-----------+-------------+-----------------+ | Object Name | Column Name | Type ID | Type Name | User Defined? | |---------------+---------------+-----------+-------------+-----------------| | Individual | FirstName | 167 | varchar | No | | Individual | LastName | 167 | varchar | No | | Occupation | JobTitle | 167 | varchar | No | | Event | EventName | 167 | varchar | No | | Scoreboard | Player | 167 | varchar | No | | Team | TeamName | 167 | varchar | No | | Client | ClientCode | 257 | clientcode | Yes | | Client | FirstName | 167 | varchar | No | | Client | LastName | 167 | varchar | No | | Colors | ColorName | 167 | varchar | No | +---------------+---------------+-----------+-------------+-----------------+
Hier is het type clientcode een door de gebruiker gedefinieerd type alias, en het is is_user_defined
vlag is 1
. In dit geval gebruik ik een CASE
uitdrukking om Yes
te retourneren (en om No
terug te geven als het 0
. is ).
Voorbeeld 4 – Ongeldig type of onvoldoende toestemming
Als u een ongeldige typenaam opgeeft of als u niet voldoende rechten heeft om naar het type te verwijzen, is het resultaat NULL.
SELECT TYPE_ID('oops') AS Result;
Resultaat:
+----------+ | Result | |----------| | NULL | +----------+