私は形式の文字列を取得するために(コードでここ4を@d)列の数を知っているだろう一般的のように私は動的SQLおよびspexecutesql行動
c1 c2 c3 c4
-----------------
2 1 7 13
9 2 8 14
1 3 9 15
5 4 10 16
2 5 11 17
11 6 12 18
のようなテーブルを持っている:
2,9,1,5,2,11, 1,2,3,4,5,6, 7,8,9,10,11,12, 13,14,15,16,17,18
は私がやっているです:私はもしそうなら
DECLARE @d INT
,@counterI INT
,@template AS nvarchar(max)
SET @d = 4;
SET @counterI = 1;
Set @template = 'SELECT STUFF(
( SELECT '','' + CAST([col] AS VARCHAR) FROM (';
WHILE (@counterI < @d) BEGIN
SET @template += ' SELECT [c'+CAST(@counterI-1 AS VARCHAR)+'] AS col FROM [MyTable] UNION ALL ';
SET @counterI = @counterI + 1;
END
Set @template += ' SELECT [c'+CAST(@counterI-1 AS VARCHAR)+'] AS col FROM [MyTable] '
Set @template += ') alldata FOR XML PATH('''') ) , 1 , 1 , '''')';
declare @CommaString varchar(max)
set @CommaString = ''
exec sp_executesql @template, N'@CommaString varchar(max) out', @CommaString out
を
select @CommaString;
なぜsp_executesqlのをやったときに、それが右に印刷されている場合、文字列を返すことを選択した瞬間に@CommaString
ではないでしょうか?
私はあなたが私が期待しているものをチェックしましたか? t?あなたのサンプルテーブルには1から4までのカラムがあり、SQLは0〜3のカラムで動作するように見えますか?また、SQLには2つの異なるテーブル名がありますか? – James
申し訳ありませんが、私はコードを正しくコピーしていませんでした。私はそれを更新しました。また、var @templateは期待したことがあります。実際には、そのクエリを実行して、spexecsqlの部分で問題になります。 .. – cMinor