Gibt es eine SQL-Anweisung, die den Typ einer Spalte in einer Tabelle zurückgeben kann?
Antworten
Zu viele Anzeigen?
MgSam
Punkte
11264
Um auf den obigen Antworten aufzubauen, ist es oft nützlich, den Spaltendatentyp in demselben Format zu erhalten, das Sie für die Deklaration von Spalten benötigen.
Zum Beispiel, varchar(50)
, varchar(max)
, decimal(p, s)
.
Dies ermöglicht es Ihnen, dies zu tun:
SELECT
[Name] = c.[name]
, [Type] =
CASE
WHEN tp.[name] IN ('varchar', 'char', 'varbinary') THEN tp.[name] + '(' + IIF(c.max_length = -1, 'max', CAST(c.max_length AS VARCHAR(25))) + ')'
WHEN tp.[name] IN ('nvarchar','nchar') THEN tp.[name] + '(' + IIF(c.max_length = -1, 'max', CAST(c.max_length / 2 AS VARCHAR(25)))+ ')'
WHEN tp.[name] IN ('decimal', 'numeric') THEN tp.[name] + '(' + CAST(c.[precision] AS VARCHAR(25)) + ', ' + CAST(c.[scale] AS VARCHAR(25)) + ')'
WHEN tp.[name] IN ('datetime2') THEN tp.[name] + '(' + CAST(c.[scale] AS VARCHAR(25)) + ')'
ELSE tp.[name]
END
, [RawType] = tp.[name]
, [MaxLength] = c.max_length
, [Precision] = c.[precision]
, [Scale] = c.scale
, [IsNullable] = c.is_nullable
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types tp ON c.user_type_id = tp.user_type_id
WHERE s.[name] = 'dbo' AND t.[name] = 'MyTable'
Assaf
Punkte
1334
Arne H. Bitubekk
Punkte
2805
Nii Joshua
Punkte
259
csebryam
Punkte
1011
TSQL/MSSQL verwenden
Mit dieser Abfrage erhalten Sie: Tabellenname, Spaltenname, Datentyp, Datentyplänge und zulässige Nullen
SELECT TABLE_NAME,COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'your_table_name'
Das einzige, was geändert werden muss, ist your_table_name.