合并string_split操作的结果并更新表



我有一个包含3列的表:col1、col2、col3。我需要在这个表中插入行,我的输入是3个参数,一个int param和两个需要拆分的varchar param。例如

@param1 = 1    
@param2 = '2,3'
@param3 = '4,5'

要生成的行是

1,2,4
1,3,5

我试图用这样的代码接近期望的结果

WITH group1 AS (
SELECT @param1 as col1, value as col2 from string_split(@param2,',')
),
group2 AS (
SELECT @param1 as col1, value as col3 from string_split(@param3,',') 
)
SELECT group1.col1, group1.col2, group2.col3
FROM group1
JOIN group2 ON group1.col1 = group2.col1 

但这并不是我想要的。

您需要一个拆分器,它返回每个子字符串和子字符串的位置。有时,基于JSON的方法可能会有所帮助。您需要将逗号分隔的字符串转换为有效的JSON数组(2,3转换为[2,3](,使用OPENJSON()解析数组,并使用适当的JOIN:

DECLARE @param1 int = 1    
DECLARE @param2 varchar(100) = '2,3,6,8'
DECLARE @param3 varchar(100) = '4,5,9,5'
-- INSERT INTO Table1 (Column1, Column2, Column3)
SELECT 
@param1 AS Column1,
j1.[value] AS Column2, 
j2.[value] AS Column3
FROM OPENJSON (CONCAT('[', @param2, ']')) j1
FULL JOIN OPENJSON (CONCAT('[', @param3, ']')) j2 ON j1.[key] = j2.[key]

结果:

Column1 Column2 Column3
1       2       4
1       3       5
1       6       9
1       8       5

作为一个重要的注意事项(尽管STRING_SPLIT()将字符串拆分为行并返回一个表(,正如文档中所提到的,输出行可以是任何顺序,并且的顺序不能保证与输入字符串中子字符串的顺序相匹配。

相关内容

  • 没有找到相关文章

最新更新