如何在存储过程中迭代记录集?

2024-01-14

我需要从存储过程迭代记录集,并使用每个字段作为参数执行另一个存储过程。我无法在代码中完成此迭代。我在互联网上找到了示例,但它们似乎都涉及计数器。我不确定我的问题是否涉及计数器。我需要相当于 T-SQL 的foreach

目前,我的第一个存储过程将其记录集存储在临时表#mytemp 中。我假设我会像这样调用辅助存储过程:

while (something)
    execute nameofstoredprocedure arg1, arg2, arg3
end

您需要创建一个游标来循环遍历记录集。

示例表:

CREATE TABLE Customers
(
    CustomerId INT NOT NULL PRIMARY KEY IDENTITY(1,1)
    ,FirstName Varchar(50) 
    ,LastName VARCHAR(40)
)

INSERT INTO Customers VALUES('jane', 'doe')
INSERT INTO Customers VALUES('bob', 'smith')

Cursor:

DECLARE @CustomerId INT, @FirstName VARCHAR(30), @LastName VARCHAR(50)

DECLARE @MessageOutput VARCHAR(100)

DECLARE Customer_Cursor CURSOR FOR 
    SELECT CustomerId, FirstName, LastName FROM Customers


OPEN Customer_Cursor 

FETCH NEXT FROM Customer_Cursor INTO
    @CustomerId, @FirstName, @LastName

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @MessageOutput = @FirstName + ' ' + @LastName



    RAISERROR(@MessageOutput,0,1) WITH NOWAIT

    FETCH NEXT FROM Customer_Cursor INTO
    @CustomerId, @FirstName, @LastName
END
CLOSE Customer_Cursor
DEALLOCATE Customer_Cursor

以下是有关如何创建它们的 MSDN 链接。

http://msdn.microsoft.com/en-us/library/ms180169.aspx http://msdn.microsoft.com/en-us/library/ms180169.aspx

这就是为什么我使用 Raise Error 而不是 PRINT 进行输出。
https://kemiller2002.github.io/2014/11/24/Wait-Wait-Don-t-Tell-Me-On-Second-Thought.html https://kemiller2002.github.io/2014/11/24/Wait-Wait-Don-t-Tell-Me-On-Second-Thought.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在存储过程中迭代记录集? 的相关文章

随机推荐