【问题标题】:How is an nvarchar being populated in a select statement如何在 select 语句中填充 nvarchar
【发布时间】:2014-11-06 02:50:17
【问题描述】:

在这个答案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 只是空。

谁能指出我可以找到它是如何工作的方向?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    只需将其视为在循环中为变量赋值。为select 语句中的每一行分配变量。由于变量在每一行之间保留其值,因此您可以创建来自表行的值的串联列表。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 2013-07-28
      • 2012-04-06
      • 2023-02-02
      • 2016-03-06
      相关资源
      最近更新 更多