sql >> Databasteknik >  >> RDS >> Sqlserver

Använd TYPE_ID() för att få ID för en datatyp i SQL Server

I SQL Server kan du använda TYPE_ID() funktion för att returnera ID för en datatyp, baserat på dess namn. Detta kan vara användbart när du frågar efter en systemvy som lagrar en datatyps ID men inte dess namn. Det är vanligtvis lättare att komma ihåg namnet. Inte så lätt att komma ihåg ID.

Du kan använda TYPE_ID() för systemdatatyper och användardefinierade datatyper.

Exempel 1 – Grundläggande användning

Här är ett grundläggande exempel för att visa hur det fungerar.

SELECT TYPE_ID('varchar') AS Result;

Resultat:

+----------+
| Result   |
|----------|
| 167      |
+----------+

Detta resultat berättar för oss att varchar datatypen har ett ID på 167.

Exempel 2 – Ett databasexempel

Här är ett exempel på hur du använder TYPE_ID() i en WHERE sats för att filtrera resultaten till bara en given datatyp.

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');

Resultat:

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

Du kommer att märka att jag också använder TYPE_NAME() i det här exemplet för att returnera namnet baserat på dess ID.

Exempel 3 – Användardefinierade typer

Du kan också använda TYPE_ID() för användardefinierade typer. Här är ett exempel som inkluderar ett användardefinierat typalias i resultaten.

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');

Resultat:

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

Här är klientkodstypen ett användardefinierat typalias, och det är is_user_defined flaggan är 1 . I det här fallet använder jag en CASE uttryck för att returnera Yes (och för att returnera No om det är 0 ).

Exempel 4 – Ogiltig typ eller otillräcklig behörighet

Om du anger ett ogiltigt typnamn eller om du inte har tillräcklig behörighet för att referera till typen blir resultatet NULL.

SELECT TYPE_ID('oops') AS Result;

Resultat:

+----------+
| Result   |
|----------|
| NULL     |
+----------+

  1. Fatalt fel:Anrop till odefinierad funktion mysql_connect()

  2. mysql primärnyckel med två kolumner med automatisk ökning

  3. Använda Databas Backup Advisors för att automatisera underhållsuppgifter

  4. Pivot i Oracle 11g