Это всего лишь ответ на ваш вопрос.Если я вас правильно понимаю, и вы хотите сгенерировать предложение JOIN
для своего динамического оператора, у вас есть как минимум два варианта:
- использовать
STRING_SPLIT()
, но если вы хотите "... добавить эти поля в исходном порядке ... ", это не вариант, поскольку порядок подстрок не гарантируется - преобразовать входную строку в действительный
JSON
и использоватьOPENJSON()
.
T-SQL с использованием STRING_SPLIT ():
DECLARE @ColumnNames NVARCHAR(MAX) = N'[Id],[FirstName],[LastName]'
DECLARE @join nvarchar(max) = N''
SELECT @join = STUFF(
(
SELECT
CONCAT(
N' AND [t1].',
s.[value],
N'=[t2].',
s.[value]
)
FROM STRING_SPLIT(@ColumnNames, N',') s
FOR XML PATH('')
),
1, 5, N'')
PRINT @join
T-SQL с использованием OPENJSON ():
DECLARE @ColumnNames NVARCHAR(MAX) = N'[Id],[FirstName],[LastName]'
DECLARE @join nvarchar(max) = N''
SELECT @join = STUFF(
(
SELECT
CONCAT(
N' AND [t1].',
j.[value],
N'=[t2].',
j.[value]
)
FROM OPENJSON(CONCAT(N'["', REPLACE(STRING_ESCAPE(@ColumnNames, 'json'), N',', N'","'), N'"]')) j
ORDER BY [key]
FOR XML PATH('')
),
1, 5, N'')
PRINT @join
Вывод:
[t1].[Id]=[t2].[Id] AND [t1].[FirstName]=[t2].[FirstName] AND [t1].[LastName]=[t2].[LastName]