如何从逗号分隔字符串批量插入多行数据到SQL表?
逗号分隔字符串批量插入SQL多行多字段解决方案
我看你现在的代码已经尝试用XML来拆分逗号分隔的字符串了,但插入的时候写法不对——VALUES子句里不能直接嵌套SELECT查询。下面给你两种可行的方案,分别适配不同版本的SQL Server:
方案一:XML拆分法(兼容SQL Server 2005及以上)
这个方法基于你现有的XML拆分思路,核心是给每个拆分后的元素加上行号,这样就能把两个字符串里对应位置的元素配对插入:
DECLARE @Var varchar(MAX) = '1,2,3'; DECLARE @Delimiter AS CHAR(1) = ','; -- 拆分第一个字符串并生成行号 WITH SplitVar AS ( SELECT N.value('.', 'INT') AS ID, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum FROM ( SELECT CAST(('<X>' + REPLACE(@Var, @Delimiter, '</X><X>') + '</X>') AS XML) AS XMLData ) AS t CROSS APPLY XMLData.nodes('X') AS Split(N) ), SplitVar1 AS ( DECLARE @Var1 nvarchar(MAX) = '10,11,12'; SELECT N.value('.', 'INT') AS ID1, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum FROM ( SELECT CAST(('<X>' + REPLACE(@Var1, @Delimiter, '</X><X>') + '</X>') AS XML) AS XMLData ) AS t CROSS APPLY XMLData.nodes('X') AS Split(N) ) -- 创建临时表并插入配对后的数据 DECLARE @temp TABLE (ID INT, ID1 INT); INSERT INTO @temp (ID, ID1) SELECT sv.ID, sv1.ID1 FROM SplitVar sv JOIN SplitVar1 sv1 ON sv.RowNum = sv1.RowNum; -- 验证结果 SELECT * FROM @temp;
代码说明:
- 用
CTE(公共表表达式)分别拆分两个字符串,同时用ROW_NUMBER()生成行号,保证两个字符串里的第n个元素能对应上 - 通过行号关联两个拆分结果,再插入到临时表中
- 最后可以查询临时表确认插入结果
方案二:STRING_SPLIT法(SQL Server 2016及以上)
如果你的SQL Server版本是2016或更高,可以用官方自带的STRING_SPLIT函数,写法更简洁:
DECLARE @Var varchar(MAX) = '1,2,3'; DECLARE @Var1 nvarchar(MAX) = '10,11,12'; DECLARE @Delimiter AS CHAR(1) = ','; WITH SplitVar AS ( SELECT CAST(value AS INT) AS ID, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum FROM STRING_SPLIT(@Var, @Delimiter) ), SplitVar1 AS ( SELECT CAST(value AS INT) AS ID1, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum FROM STRING_SPLIT(@Var1, @Delimiter) ) DECLARE @temp TABLE (ID INT, ID1 INT); INSERT INTO @temp (ID, ID1) SELECT sv.ID, sv1.ID1 FROM SplitVar sv JOIN SplitVar1 sv1 ON sv.RowNum = sv1.RowNum; -- 验证结果 SELECT * FROM @temp;
注意事项:
STRING_SPLIT返回的value是字符串类型,需要转换成你需要的INT类型ORDER BY (SELECT NULL)是为了保证拆分后的顺序和原字符串一致(虽然官方文档说顺序不保证,但实际测试中大部分场景下是按原顺序返回的,如果需要严格顺序,建议用XML方法或者自定义拆分函数)
内容的提问来源于stack exchange,提问作者Sanjeev Gandhi
相关产品推荐
相关产品推荐

