Ich möchte den Namen aller Spalten einer Tabelle abfragen. Wie das geht, habe ich gefunden in:
Aber ich muss wissen: Wie kann das in Microsoft SQL Server (in meinem Fall 2008) gemacht werden?
SELECT TOP 0 * FROM my_tablesind weniger Tastenanschläge
Ich möchte den Namen aller Spalten einer Tabelle abfragen. Wie das geht, habe ich gefunden in:
Aber ich muss wissen: Wie kann das in Microsoft SQL Server (in meinem Fall 2008) gemacht werden?
SELECT TOP 0 * FROM my_tablesind weniger Tastenanschläge
Antworten:
Sie können diese und viele weitere Informationen erhalten, indem Sie die Ansichten des Informationsschemas abfragen .
Diese Beispielabfrage:
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'Customers'
Kann über alle diese DB-Objekte erstellt werden:
Nortwind....)
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'tableName';das funktioniert bei mir
TABLE_SCHEMA = '?' AND TABLE_NAME = '?'da ich auf localhost bin und mehrere Tabellen mit demselben Namen, aber in verschiedenen Datenbanken habe.
Sie können die gespeicherte Prozedur sp_columns verwenden, die Informationen zu allen Spalten für eine bestimmte Tabelle zurückgibt. Weitere Informationen finden Sie hier http://msdn.microsoft.com/en-us/library/ms176077.aspx
Sie können dies auch über eine SQL-Abfrage tun. So etwas sollte helfen:
SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('dbo.yourTableName')
Oder eine Variation wäre:
SELECT o.Name, c.Name
FROM sys.columns c
JOIN sys.objects o ON o.object_id = c.object_id
WHERE o.type = 'U'
ORDER BY o.Name, c.Name
Dadurch werden alle Spalten aus allen Tabellen abgerufen, sortiert nach Tabellennamen und dann nach Spaltennamen.
select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='tableName'
Dies ist besser als von zu bekommen, sys.columnsweil es DATA_TYPEdirekt zeigt .
AND TABLE_SCHEMA = 'schemaName'die WHEREKlausel hinzu.
JOIN sys.types t on c.system_type_id = t.system_type_idund hinzufügen t.name, um auch die Typen neben jedem Spaltennamen abzurufen.
Sie können sp_helpin SQL Server 2008 verwenden.
sp_help <table_name>;
Tastaturkürzel für den obigen Befehl: Wählen Sie den Tabellennamen aus (dh markieren Sie ihn) und drücken Sie ALT+ F1.
Sie können diese Abfrage schreiben, um den Spaltennamen und alle Details abzurufen, ohne INFORMATION_SCHEMA in MySql zu verwenden:
SHOW COLUMNS FROM database_Name.table_name;
--This is another variation used to document a large database for conversion (Edited to --remove static columns)
SELECT o.Name as Table_Name
, c.Name as Field_Name
, t.Name as Data_Type
, t.length as Length_Size
, t.prec as Precision_
FROM syscolumns c
INNER JOIN sysobjects o ON o.id = c.id
LEFT JOIN systypes t on t.xtype = c.xtype
WHERE o.type = 'U'
ORDER BY o.Name, c.Name
--In the left join, c.type is replaced by c.xtype to get varchar types
SELECT column_name, data_type, character_maximum_length, table_name,ordinal_position, is_nullable
FROM information_schema.COLUMNS WHERE table_name LIKE 'YOUR_TABLE_NAME'
ORDER BY ordinal_position
Führen Sie einfach diesen Befehl aus
EXEC sp_columns 'Your Table Name'
Dieser SO-Frage fehlt der folgende Ansatz:
-- List down all columns of table 'Logging'
select * from sys.all_columns where object_id = OBJECT_ID('Logging')
Es wird überprüft , ob die angesichts der tableist Basistabelle .
SELECT
T.TABLE_NAME AS 'TABLE NAME',
C.COLUMN_NAME AS 'COLUMN NAME'
FROM INFORMATION_SCHEMA.TABLES T
INNER JOIN INFORMATION_SCHEMA.COLUMNS C ON T.TABLE_NAME=C.TABLE_NAME
WHERE T.TABLE_TYPE='BASE TABLE'
AND T.TABLE_NAME LIKE 'Your Table Name'
Sie können dies versuchen. Dies gibt alle Spaltennamen mit ihren jeweiligen Datentypen an.
desc <TABLE NAME> ;
Sie können diese Abfrage verwenden
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'
SELECT c.Name
FROM sys.columns c
JOIN sys.objects o ON o.object_id = c.object_id
WHERE o.object_id = OBJECT_ID('TABLE_NAME')
ORDER BY c.Name
Eine andere Option, die wohl intuitiver ist, ist:
SELECT [name]
FROM sys.columns
WHERE object_id = OBJECT_ID('[yourSchemaType].[yourTableName]')
Dadurch erhalten Sie alle Spaltennamen in einer einzigen Spalte. Wenn Sie sich für andere Metadaten interessieren, können Sie die SELECT STATEMENT TO ändern SELECT *.
Die Antworten zusammenfassen
Ich kann viele verschiedene Antworten und Möglichkeiten sehen, dies zu tun, aber da ist das Problem und das ist das objective.
Ja, das Ziel. Wenn Sie only knowdie Spaltennamen möchten, können Sie verwenden
SELECT * FROM my_table WHERE 1=0
or
SELECT TOP 0 * FROM my_table
Aber wenn Sie usediese Spalten irgendwo haben oder sie einfach sagen möchten, sind die manipulateobigen schnellen Abfragen nicht von Nutzen. Sie müssen verwenden
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'Customers'
eine weitere Möglichkeit, einige bestimmte Spalten zu kennen, in denen wir ähnliche Spalten benötigen
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME like N'%[ColumnName]%' and TABLE_NAME = N'[TableName]'
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'name_of_your_table'
SELECT * FROM my_table WHERE 1=0