对于SQL 2008+
使用 ISNULL(Colmn1 + ', ', '') 最后总是会以逗号开头,所以你必须处理它。例子:
DECLARE @Column1 NVARCHAR(10) = 'Column1'
, @Column2 NVARCHAR(10) = 'Column2'
SELECT SUBSTRING( ISNULL(@Column1 + ', ', '') + ISNULL(@Column2 + ', ', '')
, 0 --Starting from 0 not 1 to remove leading comma
, LEN(ISNULL(@Column1 + ', ', '') + ISNULL(@Column2 + ', ', '')))
或者我们可以反过来处理这个问题,并使用 STUFF 函数删除看起来更干净的开头逗号,例如:
SELECT STUFF (ISNULL(( ', ' + @Column1), '') + ISNULL(( ', ' + @Column2), ''), 1, 2, N'')
对于SQL 2012+,我们可以使用 CONCAT 函数并使用 STUFF 删除开头的逗号,类似于我们之前的示例,但要避免 ISNULL:
SELECT STUFF(CONCAT( ', ' + @Column1, ', ' + @Column2), 1, 2, N'')
对于SQL 2017+,引入了 CONCAT_WS,您可以在其中连接/连接多个字符串列,并在函数的第一个参数中指定分隔符:
MS 文档 CONCAT_WS
MS 文档示例:
SELECT CONCAT_WS(',' --delimiter
,'1 Microsoft Way', NULL, NULL, 'Redmond', 'WA', 98052) AS Address;