Ich verwende SQL Server 2008. Angenommen, ich erstelle eine temporäre Tabelle wie diese:
create table #MyTempTable (col1 int,col2 varchar(10))
Wie kann ich die Liste der Felder dynamisch abrufen? Ich würde gerne so etwas sehen:
Fields:
col1
col2
Ich habe darüber nachgedacht, sys.columns abzufragen, aber es scheint keine Informationen über temporäre Tabellen zu speichern. Irgendwelche Ideen?
sql
sql-server
sql-server-2008
temp-tables
Anthony
quelle
quelle
select name from tempdb.sys.tables
Sie alle temporären Tabellennamenselect * from tempdb.INFORMATION_SCHEMA.COLUMNS where table_name like '#MyTempTable%'
quelle
INFORMATION_SCHEMA
. Sie können die Datentypen einfach durch Verbinden mitsys.types
und Sie können die Tabellennamen einfach überOBJECT_NAME( object_id , database_id )
oder Verbinden mit abrufentempdb.sys.tables
. Dies ist alles, was dieINFORMATION_SCHEMA
Ansichten tun.So verwenden Sie information_schema und kollidieren nicht mit anderen Sitzungen:
select * from tempdb.INFORMATION_SCHEMA.COLUMNS where table_name = object_name( object_id('tempdb..#test'), (select database_id from sys.databases where name = 'tempdb'))
quelle
Die temporären Tabellen sind in "tempdb" definiert und die Tabellennamen sind "entstellt".
Diese Abfrage sollte den Trick machen:
select c.* from tempdb.sys.columns c inner join tempdb.sys.tables t ON c.object_id = t.object_id where t.name like '#MyTempTable%'
Marc
quelle
Sie können es auch auf folgende Weise tun ..
create table #test (a int, b char(1)) select * From #test exec tempdb..sp_columns '#test'
quelle
CREATE TABLE
:exec tempdb..sp_columns '#test'
Anthony
Versuchen Sie es mit dem folgenden. es wird Ihre erwartete Ausgabe geben
select c.name as Fields from tempdb.sys.columns c inner join tempdb.sys.tables t ON c.object_id = t.object_id where t.name like '#MyTempTable%'
quelle
select * from tempdb.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=OBJECT_NAME(OBJECT_ID('#table'))
quelle