470 Stimmen

SQL-Anweisung zur Ermittlung des Spaltentyps

Gibt es eine SQL-Anweisung, die den Typ einer Spalte in einer Tabelle zurückgeben kann?

7voto

AjV Jsy Punkte 5481

Um die tatsächlich deklarierten Datentypen abzurufen, z. B. für die Verwendung in dynamischem SQL für ALTER COLUMNs, kann etwas wie folgt verwendet werden:

SELECT
    TABLE_NAME, 
    COLUMN_NAME,
    DATA_TYPE
        + CASE WHEN DATA_TYPE IN ('char','nchar','varchar','nvarchar','binary','varbinary')
                    AND CHARACTER_MAXIMUM_LENGTH > 0 THEN
                 COALESCE('('+CONVERT(varchar,CHARACTER_MAXIMUM_LENGTH)+')','')
            ELSE '' END
        + CASE WHEN DATA_TYPE IN ('decimal','numeric') THEN
                COALESCE('('+CONVERT(varchar,NUMERIC_PRECISION)+','+CONVERT(varchar,NUMERIC_SCALE)+')','')
            ELSE '' END
        AS Declaration_Type,
    CASE WHEN IS_NULLABLE='NO' THEN 'NOT ' ELSE '' END + 'NULL' AS Nullable
FROM INFORMATION_SCHEMA.COLUMNS
ORDER BY 1,2

5voto

Talha Tayyab Punkte 1803

Nur falls jemand dies nützlich findet. In SQL Server:

sp_columns 'yourtablename'

So erhalten Sie Details zu allen Spalten. Sie finden hier Spaltenname, Datentyp, Typname, Genauigkeit, Länge, iss_nullable usw.

5voto

Arno Tolmeijer Punkte 41

Ab SQL Server 2012:

SELECT * FROM sys.dm_exec_describe_first_result_set( N'SELECT * FROM [my].[Table]', NULL, 0 );

4voto

gubitza Punkte 31

Ich finde dies nützlich für Abfragen, insbesondere wenn sie Aggregate oder mehrere Tabellen verwenden (SQL Server)

DECLARE @query nvarchar(max) = 'select * from yourtable';
EXEC sp_describe_first_result_set @query, null, 0;

4voto

Bob Krieter Punkte 51

Eine andere Möglichkeit für MS SQL besteht darin, die select Abfrage hier mit der Abfrage, für die Sie die Typen benötigen:

declare @sql varchar(4000);

set @sql = 'select ''hi'' as greeting';

select * from master.sys.dm_exec_describe_first_result_set (@sql, Null, 0);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X