You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将逗号分隔字符串批量插入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:40:06