合并 string_split 操作的结果并更新 table
Merge results of string_split operations and update table
我有一个包含 3 列的 table:col1、col2、col3。我需要在此 table 中插入行,我的输入是 3 个参数,一个 int 参数和两个我需要拆分的 varchar 参数。例如
@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
但这不是我想要的。
您需要一个拆分器,即 returns 每个子字符串和子字符串的位置。有时 JSON-based 方法可能会有所帮助。您需要将 comma-separated 字符串转换为有效的 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()
将字符串拆分为行和 returns 一个 table),如 documentation 中所述 输出行可能是任何顺序,并且顺序不能保证与输入字符串中子字符串的顺序相匹配。
我有一个包含 3 列的 table:col1、col2、col3。我需要在此 table 中插入行,我的输入是 3 个参数,一个 int 参数和两个我需要拆分的 varchar 参数。例如
@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
但这不是我想要的。
您需要一个拆分器,即 returns 每个子字符串和子字符串的位置。有时 JSON-based 方法可能会有所帮助。您需要将 comma-separated 字符串转换为有效的 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()
将字符串拆分为行和 returns 一个 table),如 documentation 中所述 输出行可能是任何顺序,并且顺序不能保证与输入字符串中子字符串的顺序相匹配。