SQLSERVER在存储过程中分割字符串并循环操作数据

1、在SQL Server中创建一个用于分割字符串的用户定义函数

CREATE FUNCTION dbo.SplitString
(
    @InputString NVARCHAR(MAX),   -- 输入的字符串
    @Delimiter CHAR(1)            -- 字符串的分隔符
)
RETURNS TABLE
AS
RETURN (
    WITH SplitCTE AS (
        SELECT 
            ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum,
            LTRIM(RTRIM(SUBSTRING(value, 1, LEN(value)))) AS Value
        FROM (
            SELECT 
                CASE 
                    WHEN CHARINDEX(@Delimiter, @InputString) = 0 THEN @InputString
                    ELSE SUBSTRING(@InputString, 1, CHARINDEX(@Delimiter, @InputString) - 1)
                END AS value,
                CASE 
                    WHEN CHARINDEX(@Delimiter, @InputString) = 0 THEN ''
                    ELSE SUBSTRING(@InputString, CHARINDEX(@Delimiter, @InputString) + 1, LEN(@InputString))
                END AS remainder
            FROM (SELECT @InputString AS InputString) AS s
        ) AS SplitData
        UNION ALL
        SELECT 
            ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum,
            LTRIM(RTRIM(SUBSTRING(value, 1, LEN(value)))) AS Value
        FROM (
            SELECT 
                CASE 
                    WHEN CHARINDEX(@Delimiter, remainder) = 0 THEN remainder
                    ELSE SUBSTRING(remainder, 1, CHARINDEX(@Delimiter, remainder) - 1)
                END AS value,
                CASE 
                    WHEN CHARINDEX(@Delimiter, remainder) = 0 THEN ''
                    ELSE SUBSTRING(remainder, CHARINDEX(@Delimiter, remainder) + 1, LEN(remainder))
                END AS remainder
            FROM SplitCTE
            WHERE remainder <> ''
        ) AS SplitData
    )
    SELECT Value FROM SplitCTE
);

2、在查询中使用它来分割字符串

-- 假设你有一个字符串 "a,b,c,d"
DECLARE @commaSeparatedValues NVARCHAR(MAX) = 'a,b,c,d';

-- 使用 SplitString 函数
SELECT * FROM dbo.SplitString(@commaSeparatedValues, ',');

3、在存储过程中操作

CREATE PROCEDURE YourStoredProcedure
    @commaSeparatedValues NVARCHAR(MAX)
AS
BEGIN
    DECLARE @values TABLE (Value NVARCHAR(50));

    -- 使用内置函数解析并插入到临时表
    INSERT INTO @values (Value)
    SELECT value 
    FROM dbo.SplitString(@commaSeparatedValues, ',');

    -- 遍历并处理每一项数据
    DECLARE @value NVARCHAR(50);
    DECLARE valuesCursor CURSOR FOR
    SELECT Value FROM @values;

    OPEN valuesCursor;
    FETCH NEXT FROM valuesCursor INTO @value;

    WHILE @@FETCH_STATUS = 0
    BEGIN
        -- 在这里添加你的数据处理逻辑
        -- 例如,将所有值转换为大写
        SET @value = UPPER(@value);

        -- 然后插入到目标表
        INSERT INTO YourTable (ItemName)
        VALUES (@value);

        FETCH NEXT FROM valuesCursor INTO @value;
    END;

    CLOSE valuesCursor;
    DEALLOCATE valuesCursor;
END;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值