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

SQL Server 2014存储过程嵌套循环插入分隔字符串仅生成部分行问题

问题分析

你的存储过程仅生成第一个地点对应品牌数据的原因是:处理第一个地点时直接修改了传入的@Brand参数,将所有品牌拆分完毕。后续地点循环时,@Brand已无|分隔符,内层品牌循环直接跳过,无法生成其他地点与品牌的组合数据。

修正后的存储过程
ALTER PROCEDURE [dbo].[Add_Reviewer]
     @FirstName NVARCHAR(MAX)
    ,@LastName NVARCHAR(MAX)
    ,@Email NVARCHAR(MAX)
    ,@Brand NVARCHAR(MAX)
    ,@Location NVARCHAR(MAX)
    ,@Department NVARCHAR(MAX)
    ,@ProductLine NVARCHAR(MAX)
AS
BEGIN
    -- 保存原始品牌字符串,避免循环中修改导致后续地点无法复用
    DECLARE @OriginalBrand NVARCHAR(MAX) = @Brand
    DECLARE @TempBrand NVARCHAR(MAX)
    DECLARE @templocation NVARCHAR(MAX)

    WHILE CHARINDEX('|', @Location) > 0 
    BEGIN
        SET @templocation = SUBSTRING(@Location, 1, CHARINDEX('|', @Location) - 1 )
        -- 每次处理新地点时,重置临时品牌变量为原始品牌字符串
        SET @TempBrand = @OriginalBrand

        WHILE CHARINDEX('|', @TempBrand) > 0 
        BEGIN
            DECLARE @tempbrand NVARCHAR(MAX)
            SET @tempbrand = SUBSTRING(@TempBrand, 1, CHARINDEX('|', @TempBrand) - 1 )

             INSERT INTO [Reviewers] ([FirstName], [LastName],
                                      [Email], [Brand], [Location],
                                      [ProductLine], [Department]) 
             VALUES (@FirstName, @LastName,
                     @Email, @tempbrand, @templocation,
                     @ProductLine, @Department)

             SET @TempBrand = SUBSTRING(@TempBrand, CHARINDEX('|', @TempBrand) + 1, LEN(@TempBrand))
        END

        SET @Location = SUBSTRING(@Location, CHARINDEX('|', @Location) + 1, LEN(@Location))
    END
END
关键修改点
  • 新增@OriginalBrand变量保存原始品牌字符串,避免直接修改传入的@Brand参数
  • 每次进入地点循环时,将@TempBrand重置为@OriginalBrand,确保每个地点都能与所有品牌进行组合
  • 内层品牌循环操作@TempBrand而非原始@Brand,保证循环独立性
补充说明

如果你的输入字符串末尾可能存在无内容的|(如示例中的9|10|11|),当前逻辑已能正确处理最后一个品牌值。若需要兼容末尾无分隔符的情况(如9|10|11),可在循环结束后单独处理剩余的品牌和地点值。

内容的提问来源于stack exchange,提问作者Craigjb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 03:32:29