我正在使用我在网站上找到的一些代码而我无法理解这一点。
SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [DATE], 106) + ']',
'[' + CONVERT(NVARCHAR, [DATE], 106) + ']')
FROM (SELECT DISTINCT [DATE] FROM #DailyReport ) PV order by [DATE]
返回
[02 May 2016],[03 May 2016],[04 May 2016],[05 May 2016],[06 May 2016],[08 May 2016],[09 May 2016],[10 May 2016],[11 May 2016],[12 May 2016],[13 May 2016],[15 May 2016],[16 May 2016],[17 May 2016],[18 May 2016],[19 May 2016],[20 May 2016],[22 May 2016],[23 May 2016],[24 May 2016],[25 May 2016],[26 May 2016],[27 May 2016],[29 May 2016],[30 May 2016],[31 May 2016]
但它是如何运作的?我希望我明白我是如何获得所有这些专栏的,为什么有两个专栏?[' + CONVERT(NVARCHAR,[DATE],106)+']'短语。
答案 0 :(得分:2)
您指出的两个短语只是coalesce()
有效。有一种更简单的方法来编写逻辑。也许这有助于解释会发生什么:
SELECT @cols = COALESCE(@cols + ',', '') + '[' + CONVERT(NVARCHAR(255), [DATE], 106) + ']',
FROM (SELECT DISTINCT [DATE] FROM #DailyReport
) PV
ORDER BY [DATE];
在您的情况下,完整连接是COALESCE()
的第一个参数,因此需要表达式作为第一个参数。但是,如果那是NULL
,则需要再次进行。
注意:当使用VARCHAR()
,NVARCHAR()
或SQL Server中的任何字符类型时,总是包含长度说明符。默认长度因上下文而异,如果默认值不够大,则可能很难追踪错误。