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

3 Möglichkeiten zum Abrufen des Datentyps einer Spalte in SQL Server (T-SQL)

GUIs wie SSMS oder Azure Data Studio machen es einfach, den Datentyp einer Spalte zu sehen. Normalerweise ist es einfach, im Objekt-Explorer zu der Spalte zu navigieren, und Sie können den Datentyp direkt neben der Spalte sehen.

Wenn Sie jedoch T-SQL verwenden, müssen Sie eine Abfrage ausführen.

Die information_schema.columns Anzeigen

Die information_schema.columns view ist eine gute Option, wenn Sie nur den Datentyp wollen und nicht mehr:

SELECT 
    COLUMN_NAME, 
    DATA_TYPE, 
    CHARACTER_MAXIMUM_LENGTH AS MAX_LENGTH, 
    CHARACTER_OCTET_LENGTH AS OCTET_LENGTH 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'Products' 
AND COLUMN_NAME = 'ProductName';

Beispielergebnis:

+---------------+-------------+--------------+----------------+
| COLUMN_NAME   | DATA_TYPE   | MAX_LENGTH   | OCTET_LENGTH   |
|---------------+-------------+--------------+----------------|
| ProductName   | varchar     | 255          | 255            |
+---------------+-------------+--------------+----------------+

Ersetzen Sie Products und ProductName mit dem Namen Ihrer Tabelle bzw. Spalte.

OK, ich habe hier etwas mehr als nur den Datentyp zurückgegeben. Sie können die anderen Spalten jedoch bei Bedarf weglassen. Oder Sie können weitere hinzufügen. Beispielsweise gibt es Spalten, die die Genauigkeit der Spalte enthalten, falls Sie eine numerische oder datetime-Spalte betrachten.

Sie können alle Spalten wie folgt zurückgeben:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'Products' 
AND COLUMN_NAME = 'ProductName';

Die sys.columns Anzeigen

Die sys.columns Ansicht ist eine weitere Option. Wir können dies mit den sys.tables verbinden Ansicht, um eine bestimmte Spalte aus einer bestimmten Tabelle abzurufen:

SELECT 
    c.name,
    type_name(c.system_type_id) AS system_type,
    type_name(c.user_type_id) AS user_type,
    c.max_length,
    c.precision,
    c.scale
FROM sys.tables t 
JOIN sys.columns c ON t.object_id = c.object_id
WHERE t.name = 'Products'
AND c.name = 'ProductName';

Beispielergebnis:

+-------------+---------------+-------------+--------------+-------------+---------+
| name        | system_type   | user_type   | max_length   | precision   | scale   |
|-------------+---------------+-------------+--------------+-------------+---------|
| ProductName | varchar       | varchar     | 255          | 0           | 0       |
+-------------+---------------+-------------+--------------+-------------+---------+

Fügen Sie auch hier nach Bedarf mehr oder weniger Spalten hinzu.

In diesem Beispiel habe ich den TYPE_NAME() verwendet Funktion, um den Namen des Datentyps basierend auf seiner ID zurückzugeben. Dies hat mich davor bewahrt, einen Join für die sys.types durchzuführen Tabelle.

Die sp_help Gespeicherte Prozedur

Die sp_help gespeicherte Prozedur kann nützlich sein, wenn Sie mehr Informationen über die Tabelle zurückgeben möchten.

Diese gespeicherte Prozedur gibt Informationen über ein Datenbankobjekt zurück (jedes Objekt, das in sys.sysobjects aufgeführt ist Kompatibilitätsansicht), einen benutzerdefinierten Datentyp oder einen Datentyp:

EXEC sp_help Products;

Dies gibt eine Menge Output zurück, daher werde ich hier nicht alles auflisten.

Ersetzen Sie einfach Products mit dem Namen der Tabelle oder eines anderen Objekts, über das Sie Informationen erhalten möchten.

Datentyp einer Spalte aus einer Abfrage abrufen

Sie können auch den Datentyp der Spalten abrufen, die von einer Abfrage zurückgegeben werden.

Weitere Informationen und Beispiele finden Sie unter Ermitteln des Datentyps der in einer Ergebnismenge in SQL Server zurückgegebenen Spalten.