如何在select语句中填充nvarchar

时间:2014-11-05 18:34:16

标签: sql sql-server

在这个答案here中,该人开始使用以下代码块:

-- 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只是空。

有人能指出我的方向,我可以找到它是如何工作的吗?

1 个答案:

答案 0 :(得分:2)

将其视为为循环中的变量赋值。为select语句中的每一行分配变量。由于变量在每行之间保留其值,因此您可以创建一个从表行中提取的值的连接列表。

select @cols = @cols + N','无效的原因是@cols变量最初为NULL。将任何字符串连接到NULL的字符串时,结果也将为NULL。这就是您使用coalesce的原因。或者,您可以将@cols变量初始化为空字符串。