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

Verwenden Sie TYPE_NAME(), um den Namen eines Datentyps in SQL Server abzurufen

In SQL Server können Sie den TYPE_NAME() verwenden Funktion, um den Namen eines Datentyps basierend auf seiner ID zurückzugeben. Dies kann nützlich sein, wenn eine Systemansicht wie sys.columns abgefragt wird die die ID des Typs zurückgibt, aber nicht seinen Namen.

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

Beispiel 1 – Grundlegende Verwendung

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

SELECT TYPE_NAME(34) AS Ergebnis;

Ergebnis:

+----------+| Ergebnis ||----------|| Bild |+----------+

Dieses Ergebnis sagt uns, dass die Typ-ID 34 für das Bild verwendet wird Typ.

Beispiel 2 – Ein nützlicheres Beispiel

Hier ist ein nützlicheres Beispiel.

USE Music;SELECT o.name AS [Objektname], c.name AS [Spaltenname], TYPE_NAME(c.user_type_id) AS [Typname] FROM sys.objects AS o JOIN sys.columns AS c ON o .object_id =c.object_idWHERE o.type_desc ='USER_TABLE';

Ergebnis:

+----------+---------------+------------+ | Objektname | Spaltenname | Geben Sie den Namen ||---------------+---------------+------------| ein | Künstler | ArtistID | Ganzzahl || Künstler | Künstlername | nvarchar || Künstler | AktivVon | Datum || Künstler | LänderID | Ganzzahl || Genres | GenreID | Ganzzahl || Genres | Gattung | nvarchar || Alben | Album-ID | Ganzzahl || Alben | Albumname | nvarchar || Alben | Veröffentlichungsdatum | Datum || Alben | ArtistID | Ganzzahl || Alben | GenreID | Ganzzahl || Land | LänderID | Ganzzahl || Land | Ländername | nvarchar |+----------+---------------+---------------------+

Diese Abfrage gibt Benutzertabellen zusammen mit ihren Spalten und dem Datentyp für jede Spalte zurück.

So sieht es aus, wenn ich TYPE_NAME() entferne :

USE Music;SELECT o.name AS [Objektname], c.name AS [Spaltenname], c.user_type_id FROM sys.objects AS o JOIN sys.columns AS c ON o.object_id =c.object_idWHERE o. type_desc ='USER_TABLE';

Ergebnis:

+----------+---------------+------------- --+| Objektname | Spaltenname | user_type_id ||---------------+---------------+--------------- -|| Künstler | ArtistID | 56 || Künstler | Künstlername | 231 || Künstler | AktivVon | 40 || Künstler | LänderID | 56 || Genres | GenreID | 56 || Genres | Gattung | 231 || Alben | Album-ID | 56 || Alben | Albumname | 231 || Alben | Veröffentlichungsdatum | 40 || Alben | ArtistID | 56 || Alben | GenreID | 56 || Land | LänderID | 56 || Land | Ländername | 231 |+---------------+---------------+--------------- -+

Es ist nicht so einfach, die Typ-ID zu lesen.

Beispiel 3 – Benutzerdefinierte Typen

Benutzerdefinierte Typen sind enthalten. Hier ist ein Beispiel, das einen benutzerdefinierten Typalias in den Ergebnissen enthält.

USE Test;SELECT o.name AS [Objektname], c.name AS [Spaltenname], TYPE_NAME(c.user_type_id) AS [Typname], CASE WHEN t.is_user_defined =1 THEN 'Yes' ELSE ' Nein' END AS [Benutzerdefiniert?]FROM sys.objects AS o JOIN sys.columns AS c ON o.object_id =c.object_idJOIN sys.types t ON c.user_type_id =t.user_type_idWHERE o.type_desc ='USER_TABLE'AND o .name ='Kunde';

Ergebnis:

+----------+---------------+------------+ ------------------+| Objektname | Spaltenname | Geben Sie Name | ein Benutzerdefinierten? ||-----------+---------------+-------------+-- ---------------|| Auftraggeber | Kundencode | Kundencode | Ja || Auftraggeber | Vorname | varchar | Nein || Auftraggeber | Nachname | varchar | Nein |+----------+---------------+-------------+- ----------------+

Beispiel 4 – Verwendung von TYPE_NAME() in einer WHERE-Klausel

Sie können TYPE_NAME() verwenden (und jede andere Systemfunktion) in einem WHERE -Klausel (und überall dort, wo ein Ausdruck erlaubt ist).

Hier modifiziere ich das vorherige Beispiel so, dass ich TYPE_NAME() verwende im WHERE Klausel.

USE Test;SELECT o.name AS [Objektname], c.name AS [Spaltenname], TYPE_NAME(c.user_type_id) AS [Typname], CASE WHEN t.is_user_defined =1 THEN 'Yes' ELSE ' Nein' END AS [Benutzerdefiniert?]FROM sys.objects AS o JOIN sys.columns AS c ON o.object_id =c.object_idJOIN sys.types t ON c.user_type_id =t.user_type_idWHERE TYPE_NAME(c.user_type_id) ='clientcode ';

Ergebnis:

+----------+---------------+------------+ ------------------+| Objektname | Spaltenname | Geben Sie Name | ein Benutzerdefinierten? ||-----------+---------------+-------------+-- ---------------|| Auftraggeber | Kundencode | Kundencode | Ja |+----------+---------------+-------------+- ----------------+

Beispiel 5 – Ungültige Typ-ID oder unzureichende Berechtigung

Wenn Sie eine ungültige Typ-ID angeben oder keine ausreichende Berechtigung haben, auf den Typ zu verweisen, ist das Ergebnis NULL.

SELECT TYPE_NAME(258) AS Ergebnis;

Ergebnis:

+----------+| Ergebnis ||----------|| NULL |+----------+

Erhalten Sie die Typ-ID

Wenn Sie den Namen des Datentyps bereits kennen, aber seine ID möchten, können Sie TYPE_ID() verwenden um die ID eines Datentyps basierend auf seinem Namen zurückzugeben.