2011-01-04 12 views
1

テーブルがありますが、その列がわかりません。私は私のテーブルにselect文を使用したいが、どのように、今文字列式のselectステートメント

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

:それ名はX

私は、次のコードを使用して、その列を見つけることができるのですか?

私は、それはそのようにすべきだと思います。私は、正しい方法を見つけることができませんでした:

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

編集:

は、実際に私はid列なしで列をマージしたいです。

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

そして

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

私はそれが悪い形だけど、なぜ 'X'の仕事から*を選択していませんあなたのために? –

+0

実際には私はID列のない列をマージしたい。 – ogun

答えて

1

あなたは、文字列内のフィールドを選択する場合は、あなたがEXEC(または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

*があなたのために動作しません理由として明確な目標や説明の後、あなたは全体SELECT声明を連結して、動的SQLを使用する必要があります。非標準名の問題を避けるには、QUOTE_NAMEを使用する必要があります。

は、あなたがそれを行うには、動的SQLを使用しますが、危険性を認識する必要がありThe Curse and Blessings of Dynamic SQL: Dealing with Dynamic Table and Column Names

1

参照してください、このhttp://www.sommarskog.se/dynamic_sql.html

を読んしかし、あなたはすべての列を選択しているので、私は中にポイントが表示されていないものをあなたは、あなたのテーブルの列、なぜちょうどSELECT * FROM Xを使用していないのすべてを選択している場合は、単にSELECT * FROM X

2

を使用して...やっています?。もう一つの方法は、動的SQLとそれは良い考えではないです。

+0

ため、マージ列のTABLE_NAME = 'X' AND COLUMN_NAME <> 'ID' とは、私は選択使いたいINFORMATION_SCHEMA.Columns FROM SELECT @columnNamesの=の@columnNames + '+' + COLUMN_NAME ... ..あなたの答えは。 – ogun

関連する問題