2016-09-09 8 views
0

同じ列名を持つテーブルと一時テーブルに行を挿入する必要があるクエリで作業しています。テーブルに挿入する列名のリストを作成

各insert文で列名を繰り返さないようにしたいのですが、リストを作成してそのリストをinsert文に渡すことをお勧めします。

は、ここで私がこれまで持っているものです。

DECLARE @columnNameList varchar(MAX) = COALESCE(RecType, ColumnName, 
    SourcePosition, MaxWidth, isNullable, dotNetDataType, [Format]) 

EXEC('INSERT INTO #RowList (' + @columnNameList + ') 
    VALUES...... 

このほとんど作品。私はこのようになり、各列名のエラーを取得:

無効な列名「RECTYPE」

を私はそれがあるとして、列名がその周りに単一引用符を持っているのでエラーがあると思い文字列に変換されます。

渡す文字列ではなく列オブジェクトのリストを作成する方法はありますか?

+1

最後のクエリを持つ '@ sql'変数を用意し、デバッグ画面にこれを表示して何が起こっているのか把握します – techspider

答えて

0

は、あなたは下のこの文字列で検索してくださいSTUFFXML PATH

select STUFF((select ','+a.name 
    from sys.all_columns a join sys.tables t 
    on a.object_id = t.object_id 
    and t.name = 'myTableName' 
order by a.column_id 
for xml path ('') 
),1,1,'') 

OUTPUT

column1,column2,...,columnN 
0

をカンマで区切ってテーブル(ここではmyTableName)のすべての列を持つ単一の行を作成することができます。

create table #rowlist (RecType int, ColumnName int, 
    SourcePosition int, MaxWidth int, isNullable int, dotNetDataType int, [Format] int) 

DECLARE @columnNameList nvarchar(MAX) ='(RecType, ColumnName, 
    SourcePosition, MaxWidth, isNullable, dotNetDataType, [Format])' 

DECLARE @SQLCMD nvarchar(MAX) =N'INSERT INTO #RowList ' + @columnNameList + N' VALUES (1,1,1,1,1,1,1)' 

exec(@sqlcmd) 
関連する問題