Не зная полного контекста, попробуйте следующее:
DECLARE @ColNames NVARCHAR(150) = 'col1,col2'
DECLARE @JoinContion NVARCHAR(MAX) = ''
DECLARE @WhereCondition NVARCHAR(MAX) = ''
SELECT @JoinContion += CONCAT('[a].', QUOTENAME(Value), ' = ', '[b].', QUOTENAME(Value), (CASE WHEN LEAD(Value) OVER(ORDER BY Value) IS NOT NULL THEN ' AND ' ELSE '' END))
,@WhereCondition += CONCAT('[a].', QUOTENAME(Value), ' IS NULL', (CASE WHEN LEAD(Value) OVER(ORDER BY Value) IS NOT NULL THEN ' AND ' ELSE '' END))
FROM STRING_SPLIT(@ColNames,N',')
SELECT @JoinContion, @WhereCondition
- String_Split : разделить входную строку на столбцы
- Lead : чтобы определить, нужно ли нам ключевое слово
AND
, если это не последняя строка.
Имейте в виду, что NOT EXISTS
, вероятно, лучшее решение, чем LEFT JOIN