[英]TSQL - Split and Concat string
码:
DECLARE @ColumnNames NVARCHAR(MAX) = N'[Id],[FirstName],[LastName]' ;
所需输出:
[T1].[Id] = [T2].[Id] AND [T1].[FirstName] = [T2].[FirstName] AND [T1].[LastName] = [T2].[LastName]
目标:
在逗号处分割字符串并将其转换为JOIN ON子句。 因此,“ [Id]”将变成“ [T1]。[Id] = [T2]。[Id]”-并且如果有更多列(逗号分隔),它将按原始顺序附加这些字段。 请参阅“所需的输出”以获得更好的理解。 我可以使用STRING_SPLIT拆分值,但不确定如何按照我的方式填充它们。
这只是您问题的答案。 如果我对您的理解正确,并且想为动态语句生成JOIN
子句,则至少有两个选择:
STRING_SPLIT()
,但是如果您要“ ...以原始顺序附加这些字段...” ,则这不是一个选择,因为不能保证子字符串的顺序 JSON
并使用OPENJSON()
。 使用STRING_SPLIT()的T-SQL:
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
使用OPENJSON()的T-SQL:
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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.