sql >> Database >  >> RDS >> Sqlserver

Gebruik TYPE_ID() om de ID van een gegevenstype in SQL Server op te halen

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     |
+----------+

  1. Alternatief voor Intersect in MySQL

  2. Zullen de prestaties van SQLite afnemen als de database groter is dan 2 gigabyte?

  3. MySQL Workbench-alternatieven - ClusterControl Database-gebruikersbeheer

  4. SYSDATE() Voorbeelden – MySQL