我有一個像動態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
的桌子,一般我不知道列數(代碼@d這裏4)得到一個字符串形式:
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;
爲什麼不@CommaString
在選擇它返回字符串的那一刻,如果這樣做的sp_executesql的當它打印出來嗎?
你有沒有檢查@template有你期望的我T'你的示例表有第1-4個列,你的SQL看起來像在第0-3列上工作?另外,你在SQL中有兩個不同的表名? – James
對不起,我沒有複製代碼的權利,我已經更新了它,而且,是的,var @ template具有我期望的,事實上,我執行該查詢並給了我字符串,spexecsql部分中的問題產生。 .. – cMinor