Для 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 Documents CONCAT_WS
MS Doc Пример:
SELECT CONCAT_WS(',' --delimiter
,'1 Microsoft Way', NULL, NULL, 'Redmond', 'WA', 98052) AS Address;