2011-01-04 4 views
1

Ich habe eine Tabelle, aber ich kenne ihre Spalten nicht. Es Name ist XSelect-Anweisung mit String-Ausdruck

ich seine Spalten mit dem folgenden Code finden:

DECLARE @columnNames NVARCHAR(4000) = '' 
SELECT @columnNames = @columnNames + ', ' + COLUMN_NAME FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = 'X' 

Nun möchte ich select-Anweisung in meiner Tabelle verwenden, aber wie?

Ich denke, es sollte so sein. Ich habe nicht richtig Weg finden:

SELECT SUBSTRING(@columnNames, 2, LEN(@columnNames)) FROM X 

edit:

Eigentlich möchte ich Spalten ohne id-Spalte verschmelzen.

DECLARE @columnNames NVARCHAR(4000) = '' 
SELECT @columnNames = @columnNames + ' + ' + COLUMN_NAME FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = 'X' AND COLUMN_NAME <> 'id' 

Und dann

SELECT SUBSTRING(@columnNames, 4, LEN(@columnNames)) FROM X 
+4

Ich weiß, dass es schlechter Stil ist, aber warum 'wählen nicht * von X' Arbeit für dich? –

+0

eigentlich möchte ich Spalten ohne ID-Spalte zusammenführen. SELECT @columnNames = @columnNames + '+' + COLUMN_NAME VON INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'X' UND COLUMN_NAME <> 'id' und wählen Sie dann ich verwenden möchte ... – ogun

Antwort

1

Wenn Sie die Felder in der Zeichenfolge auswählen möchten Sie holen Sie müssten EXEC verwenden (oder sp_executesql)

DECLARE @columnNames NVARCHAR(4000) = '' 
SELECT @columnNames = @columnNames + case when len(@columnNames)=0 then '' else ', ' end + COLUMN_NAME FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = X 

DECLARE @SQL NVARCHAR(1024) = 'select ' + @columnNames + ' from X' 
EXEC (@SQL) 
2

verwenden Wenn Sie alle der Spalten der Tabelle auswählen, warum nur nicht SELECT * FROM X benutzen?. Der andere Weg ist mit dynamischen SQL und das ist keine gute Idee.

+0

wegen merge Spalten .. Danke für deine Antwort. – ogun