Hängt vom RDBMS ab; SQL Server hat die sys.syscolumnsTabelle zum Beispiel.
LittleBobbyTables - Au Revoir
3
Ja, aber es hängt davon ab, welche Art von RDBMS Sie verwenden. SQL ist eine Sprache, nicht das Datenbankprodukt, und diese Frage hängt vom jeweiligen Produkt ab. Sie können diese Art von Informationen in der INFORMATION_SCHEMA.COLUMNSTabelle finden - sofern Ihr RDBMS sie hat.
Brücke
Antworten:
461
Verwenden von SQL Server:
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME ='yourTableName'AND
COLUMN_NAME ='yourColumnName'
Nur wenn Sie den entsprechenden Spaltennamen nicht sehen möchten. Dies gibt nur die Typen zurück. Wenn Sie den Spaltennamen sehen möchten, zu dem der Typ gehört, müssen Sie auch
COLUMN_NAME
5
Und wenn Ihre Tabelle nicht im Standardschema ist, können Sie die Bedingung mitAND TABLE_SCHEMA = 'yourSchema'
luviktor
8
Das ist großartig - aber ist es möglich, dass auch der Bereich für den Spaltentyp zurückgegeben wird? dh varchar(255)statt varcharund int(11)statt int?
Don Cheadle
13
@mmcrae: Es ist möglich, die Spalte CHARACTER_MAXIMUM_LENGTHin zu verwenden INFORMATION_SCHEMA.COLUMNS. Führen Sie einfach eine aus SELECT * FROM INFORMATION_SCHEMA.COLUMNS, um alle verfügbaren Spalten anzuzeigen.
Francis P
2
Was ist mit temporären Tabellen?
Ilya Gazman
77
Der einfachste Weg in TSQL ist:
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME ='yourTableName'
Ich habe mich dafür ausgesprochen, da dies zwar nicht genau die Antwort ist, mir aber wertvolle Informationen liefert. ZB die "IsComputed" -Informationen, die ich nicht im Informationsschema gefunden habe, aber ich kann sie im Prozedurcode sp_help finden und von dort kopieren.
Christoph
2
Wählen Sie den Tabellennamen und klicken Sie auf Alt+F1.. ergibt das gleiche Ergebnis.
Pugal
Zur Verdeutlichung: Der Name der Tabelle oder Ansicht muss im Editor ausgewählt und dann gedrückt werden Alt+F1. Nicht im Lösungsobjekt-Explorer. Dies ist so eine hilfreiche Funktion
Bugybunny
18
In TSQL / MSSQL sieht es so aus:
SELECT t.name, c.name
FROM sys.tables t
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types y ON y.user_type_id = c.user_type_id
WHERE t.name =''
Ja. Die DESCRIBESyntax ist auch in Oracle gültig, MsSQL akzeptiert diese Syntax jedoch nicht.
Fimas
Siehe Antwort von @jTC für Methoden zu MSSQL und TSQL.
Fimas
Neuere Versionen von MySQL haben information_schema.COLUMNS.
Rick James
Ich finde DESC ODER DESCRIBE (abhängig von dem von Ihnen verwendeten DBMS) nützlich für kleine Tabellen mit 3 oder 4 Spalten. Dann wird die Tabellenstruktur mit dem Spaltennamen Nullable Flag und dem Spaltentyp für große Tabellen angezeigt. Es dauert jedoch länger, bis ein Ergebnis zurückgegeben wird Es ist schwieriger, die Informationen zu finden, die Sie benötigen.
Geschwindigkeit
7
Eine weitere Variante mit MS SQL:
SELECT TYPE_NAME(system_type_id)FROM sys.columns
WHERE name ='column_name'AND[object_id]= OBJECT_ID('[dbo].[table_name]');
Um auf den obigen Antworten aufzubauen, ist es häufig hilfreich, den Spaltendatentyp in demselben Format abzurufen, das Sie zum Deklarieren von Spalten benötigen.
Zum Beispiel varchar(50), varchar(max), decimal(p, s).
Dies ermöglicht Ihnen Folgendes:
SELECT[Name]= c.[name],[Type]=CASEWHEN tp.[name]IN('varchar','char')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 /2AS 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
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'
Dies sollte die akzeptierte Antwort gewesen sein. Danke, vielleicht können Sie die Bedingung hinzufügen (t.type = 'U')
Systemtabelle
Und VARBINARY-Typen könnten leicht berücksichtigt werden, indem man dies in die erste WHENZeile einfügt :WHEN tp.[name] IN ('varchar', 'char', 'varbinary') THEN...
Reversed Engineer
3
USE[YourDatabaseName]
GO
SELECT column_name 'Column Name',
data_type 'Data Type'FROM information_schema.columns
WHERE table_name ='YourTableName'
GO
Dies gibt die Werte Spaltenname zurück und zeigt Ihnen die Namen der Spalten und die Datentypen dieser Spalten (Ints, Varchars usw.).
Um die tatsächlich deklarierten Datentypen abzurufen, z. B. für die Verwendung in dynamischem SQL, um SPALTEN ZU ÄNDERN, kann Folgendes verwendet werden:
In meinem Fall musste ich trotzdem den Datentyp für Dynamic SQL (Shudder!) Abrufen. Hier ist eine von mir erstellte Funktion, die den vollständigen Datentyp zurückgibt. Anstatt beispielsweise 'dezimal' zurückzugeben, wird DECIMAL (18,4): dbo.GetLiteralDataType zurückgegeben
Verwenden Sie diese Abfrage, um Schema, Tabelle, Spalte, Typ, max_length, is_nullable abzurufen
SELECT QUOTENAME(SCHEMA_NAME(tb.[schema_id]))AS'Schema',QUOTENAME(OBJECT_NAME(tb.[OBJECT_ID]))AS'Table',C.NAME as'Column',T.name AS'Type',C.max_length
,C.is_nullable
FROM SYS.COLUMNS C INNERJOIN SYS.TABLES tb ON tb.[object_id]= C.[object_id]INNERJOIN SYS.TYPES T ON C.system_type_id = T.user_type_id
WHERE tb.[is_ms_shipped]=0ORDERBY tb.[Name]
select columndatatype from sys.syscolumns
where referenceid =(select tableid from sys.systables
where tablename ='YOUR_TABEL_NAME'and columnname='YOUR_COLUMN_NAME')
Public Cn As ADODB.Connection
'open connection
Dim Rs As ADODB.Recordset
Set Rs = Cn.OpenSchema(adSchemaColumns, Array(Empty, Empty, UCase("Table"), UCase("field")))
'und sample (valRs ist meine Funktion für rs.fields ("CHARACTER_MAXIMUM_LENGTH"). value):
sys.syscolumns
Tabelle zum Beispiel.INFORMATION_SCHEMA.COLUMNS
Tabelle finden - sofern Ihr RDBMS sie hat.Antworten:
Verwenden von SQL Server:
quelle
AND TABLE_SCHEMA = 'yourSchema'
varchar(255)
stattvarchar
undint(11)
stattint
?CHARACTER_MAXIMUM_LENGTH
in zu verwendenINFORMATION_SCHEMA.COLUMNS
. Führen Sie einfach eine ausSELECT * FROM INFORMATION_SCHEMA.COLUMNS
, um alle verfügbaren Spalten anzuzeigen.Der einfachste Weg in TSQL ist:
quelle
Für SQL Server gibt diese gespeicherte Systemprozedur alle Tabelleninformationen zurück, einschließlich der Spaltendatentypen:
quelle
Alt+F1
.. ergibt das gleiche Ergebnis.Alt+F1
. Nicht im Lösungsobjekt-Explorer. Dies ist so eine hilfreiche FunktionIn TSQL / MSSQL sieht es so aus:
quelle
JOIN sys.types y ON y.user_type_id = c.user_type_id
system_type_id ist nicht eindeutig. sys.columns docIn Oracle SQL würden Sie dies tun:
quelle
Wenn Sie MySQL verwenden, können Sie es versuchen
SHOW COLUMNS auf dev.mysql.com
Andernfalls sollten Sie dazu in der Lage sein
quelle
DESCRIBE
Syntax ist auch in Oracle gültig, MsSQL akzeptiert diese Syntax jedoch nicht.information_schema.COLUMNS
.Eine weitere Variante mit MS SQL:
quelle
Verwenden von TSQL / MSSQL
Mit dieser Abfrage erhalten Sie: Tabellenname, Spaltenname, Datentyp, Datentyplänge und zulässige Nullen
Das einzige, was geändert werden muss, ist Ihr_Tabellenname.
quelle
Um auf den obigen Antworten aufzubauen, ist es häufig hilfreich, den Spaltendatentyp in demselben Format abzurufen, das Sie zum Deklarieren von Spalten benötigen.
Zum Beispiel
varchar(50)
,varchar(max)
,decimal(p, s)
.Dies ermöglicht Ihnen Folgendes:
quelle
WHEN
Zeile einfügt :WHEN tp.[name] IN ('varchar', 'char', 'varbinary') THEN...
Dies gibt die Werte Spaltenname zurück und zeigt Ihnen die Namen der Spalten und die Datentypen dieser Spalten (Ints, Varchars usw.).
quelle
Für IBM DB2 :
quelle
Um die tatsächlich deklarierten Datentypen abzurufen, z. B. für die Verwendung in dynamischem SQL, um SPALTEN ZU ÄNDERN, kann Folgendes verwendet werden:
quelle
In meinem Fall musste ich trotzdem den Datentyp für Dynamic SQL (Shudder!) Abrufen. Hier ist eine von mir erstellte Funktion, die den vollständigen Datentyp zurückgibt. Anstatt beispielsweise 'dezimal' zurückzugeben, wird DECIMAL (18,4): dbo.GetLiteralDataType zurückgegeben
quelle
Verwenden von TSQL / MSSQL
Sie können ein
INTO
Schlüsselwort verwenden.Das Ergebnis von
SELECT
in eine echte TabelleBeispiel:
select .... INTO real_table_name
Nach
quelle
Verwenden Sie diese Abfrage, um Schema, Tabelle, Spalte, Typ, max_length, is_nullable abzurufen
quelle
Sie erhalten Informationen zu allen Spalten in der Tabelle.
quelle
Für Spark SQL :
quelle
Für Apache Derby wie in dieser Antwort gezeigt :
quelle
In vb60 können Sie dies tun:
'und sample (valRs ist meine Funktion für rs.fields ("CHARACTER_MAXIMUM_LENGTH"). value):
quelle
Da einige Leute auch nach der Genauigkeit des Datentyps fragten, möchte ich mein Skript teilen, das ich für einen solchen Zweck erstellt habe.
Es ist nicht perfekt, aber es funktioniert in den meisten Fällen.
Verwenden von
Sql-Server
quelle
Eine weitere Option für MS SQL besteht darin, die
select
Abfrage hier durch die Abfrage zu ersetzen, für die Sie die Typen möchten:quelle