Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verwenden Sie TYPE_ID(), um die ID eines Datentyps in SQL Server abzurufen

In SQL Server können Sie die TYPE_ID() verwenden Funktion, um die ID eines Datentyps basierend auf seinem Namen zurückzugeben. Dies kann nützlich sein, wenn eine Systemansicht abgefragt wird, die die ID eines Datentyps, aber nicht seinen Namen speichert. Es ist normalerweise einfacher, sich den Namen zu merken. ID nicht so einfach zu merken.

Sie können TYPE_ID() verwenden für Systemdatentypen und benutzerdefinierte Datentypen.

Beispiel 1 – Grundlegende Verwendung

Hier ist ein einfaches Beispiel, um zu demonstrieren, wie es funktioniert.

SELECT TYPE_ID('varchar') AS Result;

Ergebnis:

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

Dieses Ergebnis sagt uns, dass die varchar Datentyp hat die ID 167.

Beispiel 2 – Ein Datenbankbeispiel

Hier ist ein Beispiel für die Verwendung von TYPE_ID() in einem WHERE -Klausel, um die Ergebnisse nur nach einem bestimmten Datentyp zu filtern.

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

Ergebnis:

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

Sie werden feststellen, dass ich auch TYPE_NAME() verwende in diesem Beispiel, um den Namen basierend auf seiner ID zurückzugeben.

Beispiel 3 – Benutzerdefinierte Typen

Sie können auch TYPE_ID() verwenden für benutzerdefinierte Typen. Hier ist ein Beispiel, das einen benutzerdefinierten Typalias in den Ergebnissen enthält.

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

Ergebnis:

+---------------+---------------+-----------+-------------+-----------------+
| 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 ist der clientcode-Typ ein benutzerdefinierter Typ-Alias, und er ist is_user_defined Flag ist 1 . In diesem Fall verwende ich einen CASE Ausdruck, um Yes zurückzugeben (und um No zurückzugeben wenn es 0 ist ).

Beispiel 4 – Ungültiger Typ oder unzureichende Berechtigung

Wenn Sie einen ungültigen Typnamen angeben oder keine ausreichende Berechtigung haben, auf den Typ zu verweisen, ist das Ergebnis NULL.

SELECT TYPE_ID('oops') AS Result;

Ergebnis:

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