美文网首页
SQL SERVER 在存储过程遍历多个结果并执行逻辑的样板代码

SQL SERVER 在存储过程遍历多个结果并执行逻辑的样板代码

作者: 吉凶以情迁 | 来源:发表于2023-09-06 15:44 被阅读0次

    @@FETCH_STATUS = 0不等于0 就是不合法的状态,在while之前可以进行判断

    0:表示游标成功检索到一行数据。在游标中有更多的数据行可用。

    -1:表示游标没有检索到更多的数据行,游标已经到达了结果集的末尾。在此状态下,通常不应再尝试使用 FETCH NEXT。

    -2:表示在 FETCH 语句中指定的游标或结果集不存在。这通常是由于游标或结果集已经关闭或不存在的情况下引发的。

        CLOSE cur;
        DEALLOCATE cur;
    

    另外WHILE @@FETCH_STATUS = 0后面要紧接着填写BEGIN,否则死循环

    FETCH NEXT FROM cur INTO的总数要和select总数相等。

    CREATE PROCEDURE [dbo].[XXX]
        @WorkerID INT,
        @CheckSumQty INT OUTPUT,
    AS
    BEGIN
        SET NOCOUNT ON;
    
        -- 声明游标
        DECLARE @ToWHID INT;
        DECLARE @PartNo NVARCHAR(50);
        DECLARE @InvCheckID INT;
        DECLARE @MinPackMtNo INT;
    
        -- 创建游标并打开
        DECLARE cur CURSOR FOR
        SELECT micb.ToWHID, micb.PartNo
        FROM A
        OPEN cur;
    
        -- 初始化变量
        FETCH NEXT FROM cur INTO @ToWHID, @PartNo;
    
        -- 循环处理每一行
        WHILE @@FETCH_STATUS = 0
        BEGIN
            -- 执行存储过程并传递参数
            DECLARE @RC INT;
            EXEC @RC = [dbo].[XXXX]
           
                @PartNo = @PartNo,
                @ToWHID = @ToWHID,
                @WorkerID = @WorkerID,
                @CheckSumQty = @CheckSumQty OUTPUT,
    
            -- 处理存储过程返回的结果(如果需要)
    
            -- 获取下一行
            FETCH NEXT FROM cur INTO @ToWHID, @PartNo
        END;
    
        -- 关闭游标并释放资源
        CLOSE cur;
        DEALLOCATE cur;
    
        -- 返回结果(如果需要)
    
    END;
    

    相关文章

      网友评论

          本文标题:SQL SERVER 在存储过程遍历多个结果并执行逻辑的样板代码

          本文链接:https://www.haomeiwen.com/subject/kwwkvdtx.html