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

So geben Sie eine Liste von Datentypen in SQL Server (T-SQL) zurück

Wenn Sie jemals eine Liste von Datentypen in SQL Server abrufen müssen, können Sie dazu eine der Systemansichten verwenden.

Insbesondere können Sie die sys.types verwenden Systemkatalogansicht. Diese Ansicht gibt alle vom System bereitgestellten und benutzerdefinierten Datentypen zurück, die in der Datenbank definiert sind. Wenn Sie SQL Server 2000 verwenden, sys.systypes sollte reichen.

Beispiel 1 – Die sys.types Anzeigen

Die sys.types view ist die beste Ansicht, wenn Sie eine neuere Version von SQL Server als SQL Server 2000 verwenden.

Der schnellste/einfachste Weg, die sys.types zu verwenden Ansicht ist alles auszuwählen. In diesem Fall könnte Ihr Code so aussehen:

SELECT * FROM sys.types;

Dies gibt jedoch viele Spalten zurück, an denen Sie möglicherweise interessiert sind oder nicht. Sie können es auf nur die Spalten eingrenzen, die Sie interessieren.

Hier ist ein Beispiel für die Auswahl einiger interessanter Spalten:

SELECT name, max_length, [precision], scale, is_user_definedFROM sys.types;

Ergebnis:

+-------------+-------------+------------ -+---------+-------------------+| Name | max_länge | Präzision | Maßstab | is_user_defined ||-----+-------------+------------- +---------+------------------|| Bild | 16 | 0 | 0 | 0 || Text | 16 | 0 | 0 | 0 || eindeutige Kennung | 16 | 0 | 0 | 0 || Datum | 3 | 10 | 0 | 0 || Zeit | 5 | 16 | 7 | 0 || datumzeit2 | 8 | 27 | 7 | 0 || datetimeoffset | 10 | 34 | 7 | 0 || winzig | 1 | 3 | 0 | 0 || smallint | 2 | 5 | 0 | 0 || int | 4 | 10 | 0 | 0 || kleinedatetime | 4 | 16 | 0 | 0 || echt | 4 | 24 | 0 | 0 || Geld | 8 | 19 | 4 | 0 || datumzeit | 8 | 23 | 3 | 0 || schweben | 8 | 53 | 0 | 0 || sql_variante | 8016 | 0 | 0 | 0 || ntext | 16 | 0 | 0 | 0 || bisschen | 1 | 1 | 0 | 0 || dezimal | 17 | 38 | 38 | 0 || numerisch | 17 | 38 | 38 | 0 || Kleingeld | 4 | 10 | 4 | 0 || bigint | 8 | 19 | 0 | 0 || Hierarchie-ID | 892 | 0 | 0 | 0 || Geometrie | -1 | 0 | 0 | 0 || Geographie | -1 | 0 | 0 | 0 || varbinär | 8000 | 0 | 0 | 0 || varchar | 8000 | 0 | 0 | 0 || binär | 8000 | 0 | 0 | 0 || Zeichen | 8000 | 0 | 0 | 0 || Zeitstempel | 8 | 0 | 0 | 0 || nvarchar | 8000 | 0 | 0 | 0 || nchar | 8000 | 0 | 0 | 0 || xml | -1 | 0 | 0 | 0 || Systemname | 256 | 0 | 0 | 0 |+-------------+--------------+--------------------- +---------+------------------+

Dies sind die Datentypen innerhalb der aktuellen Datenbank. Wenn Sie zu einer anderen Datenbank wechseln, könnten Sie andere Ergebnisse erhalten (dies hängt weitgehend davon ab, ob benutzerdefinierte Datentypen oder Alias-Datentypen definiert wurden und ob sie sich zwischen den Datenbanken unterscheiden).

Beispiel 2 – Alias ​​&benutzerdefinierte Datentypen

Im vorherigen Beispiel habe ich den is_user_defined eingefügt Säule. Wir können sehen, dass keiner der Datentypen benutzerdefinierte oder Alias-Datentypen sind, weil sie alle 0 haben als ihren Wert.

Lassen Sie uns einen Alias-Datentyp erstellen und dann sehen, wie er in den Ergebnissen angezeigt wird.

Erstellen Sie den Alias-Datentyp:

CREATE TYPE SSN FROM varchar(11) NOT NULL;

Lassen Sie uns nun die Abfrage erneut ausführen.

SELECT name, max_length, [precision], scale, is_user_definedFROM sys.types;

Ergebnis:

+-------------+-------------+------------ -+---------+-------------------+| Name | max_länge | Präzision | Maßstab | is_user_defined ||-----+-------------+------------- +---------+------------------|| Bild | 16 | 0 | 0 | 0 || Text | 16 | 0 | 0 | 0 || eindeutige Kennung | 16 | 0 | 0 | 0 || Datum | 3 | 10 | 0 | 0 || Zeit | 5 | 16 | 7 | 0 || datumzeit2 | 8 | 27 | 7 | 0 || datetimeoffset | 10 | 34 | 7 | 0 || winzig | 1 | 3 | 0 | 0 || smallint | 2 | 5 | 0 | 0 || int | 4 | 10 | 0 | 0 || kleinedatetime | 4 | 16 | 0 | 0 || echt | 4 | 24 | 0 | 0 || Geld | 8 | 19 | 4 | 0 || datumzeit | 8 | 23 | 3 | 0 || schweben | 8 | 53 | 0 | 0 || sql_variante | 8016 | 0 | 0 | 0 || ntext | 16 | 0 | 0 | 0 || bisschen | 1 | 1 | 0 | 0 || dezimal | 17 | 38 | 38 | 0 || numerisch | 17 | 38 | 38 | 0 || Kleingeld | 4 | 10 | 4 | 0 || bigint | 8 | 19 | 0 | 0 || Hierarchie-ID | 892 | 0 | 0 | 0 || Geometrie | -1 | 0 | 0 | 0 || Geographie | -1 | 0 | 0 | 0 || varbinär | 8000 | 0 | 0 | 0 || varchar | 8000 | 0 | 0 | 0 || binär | 8000 | 0 | 0 | 0 || Zeichen | 8000 | 0 | 0 | 0 || Zeitstempel | 8 | 0 | 0 | 0 || nvarchar | 8000 | 0 | 0 | 0 || nchar | 8000 | 0 | 0 | 0 || xml | -1 | 0 | 0 | 0 || Systemname | 256 | 0 | 0 | 0 || Sozialversicherungsnummer | 11 | 0 | 0 | 1 |+-------------+--------------+--------------------- +---------+------------------+

Der neue Datentyp erscheint (ganz unten). Es hat auch einen Wert von 1 im is_user_defined Spalte.

Die sys.systypes Anzeigen

Es gibt auch eine sys.systypes Systemkompatibilitätsansicht, die nur für die Abwärtskompatibilität bereitgestellt wird. Das liegt daran, dass systypes war der Name einer Systemtabelle in SQL Server 2000, und es könnte viele Legacy-Systeme geben, deren Code auf diese Tabelle verweist.

Microsoft hat angegeben, dass die sys.systypes Die Systemkompatibilitätsansicht wird in einer zukünftigen Version von Microsoft SQL Server entfernt und empfiehlt daher, diese Ansicht bei neuen Arbeiten nicht zu verwenden.

Mit anderen Worten, verwenden Sie sys.types stattdessen Wenn du kannst.

Wenn Sie jedoch noch eine frühere Version von SQL Server verwenden, müssen Sie sys.systypes verwenden .

Beachten Sie, dass sys.systypes enthält andere Spalten/Spaltennamen als sys.types , sodass die Spaltennamen, die ich im vorherigen Beispiel verwendet habe, nicht funktionieren.

Mit dem Sternchen (*) können Sie weiterhin alle Spalten auswählen ) allerdings Platzhalterzeichen:

SELECT * FROM sys.systypes;