如何将逗号分隔字符串批量插入SQL Server表?求查询语句或存储过程
解决方案:拆分逗号分隔值并多行插入SQL Server表
嘿,这问题我熟!要把单个QcEditorId和逗号分隔的Freelancer字符串拆分成多行插入表中,根据你使用的SQL Server版本,有几个实用的方案:
方案1:使用内置STRING_SPLIT函数(SQL Server 2016及以上)
这是最简单的方法,SQL Server 2016及以后版本自带了字符串拆分函数STRING_SPLIT,直接就能用:
-- 定义变量 DECLARE @QcEditorId INT = 21; DECLARE @Freelancer VARCHAR(100) = '2,3,4,5'; -- 插入数据到目标表(替换成你的表名) INSERT INTO YourTargetTable (QcEditorId, Freelancer) SELECT @QcEditorId, value FROM STRING_SPLIT(@Freelancer, ',');
STRING_SPLIT会把逗号分隔的字符串拆分成每行的value列,再和固定的@QcEditorId组合插入,正好得到你要的多行格式。
方案2:自定义字符串拆分函数(SQL Server 2016以下版本)
如果你的SQL Server版本比较旧,没有STRING_SPLIT,可以先创建一个自定义的表值拆分函数:
CREATE FUNCTION dbo.SplitCommaSeparatedString ( @InputString VARCHAR(MAX), @Delimiter VARCHAR(10) = ',' ) RETURNS @SplitValues TABLE (Value VARCHAR(MAX)) AS BEGIN DECLARE @StartPos INT = 1; DECLARE @EndPos INT; -- 确保字符串末尾有分隔符,避免遗漏最后一个值 IF RIGHT(@InputString, 1) <> @Delimiter SET @InputString = @InputString + @Delimiter; WHILE CHARINDEX(@Delimiter, @InputString, @StartPos) > 0 BEGIN SET @EndPos = CHARINDEX(@Delimiter, @InputString, @StartPos); INSERT INTO @SplitValues(Value) SELECT SUBSTRING(@InputString, @StartPos, @EndPos - @StartPos); SET @StartPos = @EndPos + LEN(@Delimiter); END RETURN; END
然后用这个函数来插入数据:
DECLARE @QcEditorId INT = 21; DECLARE @Freelancer VARCHAR(100) = '2,3,4,5'; INSERT INTO YourTargetTable (QcEditorId, Freelancer) SELECT @QcEditorId, Value FROM dbo.SplitCommaSeparatedString(@Freelancer);
方案3:创建存储过程(适合重复调用场景)
如果需要频繁执行这个操作,可以把逻辑封装成存储过程,方便调用:
CREATE PROCEDURE dbo.InsertFreelancerData @QcEditorId INT, @FreelancerList VARCHAR(MAX) AS BEGIN SET NOCOUNT ON; -- 这里根据你的SQL Server版本选择上面的拆分方式 INSERT INTO YourTargetTable (QcEditorId, Freelancer) SELECT @QcEditorId, value FROM STRING_SPLIT(@FreelancerList, ','); -- 旧版本替换为: -- INSERT INTO YourTargetTable (QcEditorId, Freelancer) -- SELECT @QcEditorId, Value -- FROM dbo.SplitCommaSeparatedString(@FreelancerList); END
调用存储过程的方式:
EXEC dbo.InsertFreelancerData @QcEditorId = 21, @FreelancerList = '2,3,4,5';
记得把上面代码中的YourTargetTable替换成你实际要插入的表名哦!
内容的提问来源于stack exchange,提问作者shashi sampige
相关产品推荐
相关产品推荐

