2014-11-05 45 views
0

在此應答here,人開始了與下面的代碼塊:如何一個nvarchar被填充在SELECT語句

-- Build list of cols we want to unpivot (skip PID & UID) 
declare @cols nvarchar(max) 
select @cols = coalesce(@cols+N',', N'') + quotename(c.name) from syscolumns c 
inner join sysobjects o on c.id = o.id and o.xtype = 'u' 
where o.name = 'MyTable' and c.name not in ('PID', 'UID') order by c.colid 

我試圖環繞我的頭@cols如何填充以這種方式。當我取出變量定義@cols =時,它返回一個列表。當我拿出coalesce()並且只輸入@cols+N','時,select @cols就是空。

任何人都可以點我的方向,我可以找出這是如何工作的?

回答

2

試想一下,將值賦予循環中的變量。該變量分配給select語句中的每一行。由於變量在每行之間保留其值,因此您可以創建從表格行中創建的值的連接列表。

原因select @cols = @cols + N','不起作用,是因爲@cols變量最初是NULL。將任何字符串連接到NULL的字符串時,結果也將爲NULL。這就是爲什麼你使用​​3210。或者,您可以將@cols變量初始化爲空字符串。