sql-server-2005 - 如何遍历存储过程中的记录集?

标签 sql-server-2005 tsql stored-procedures iteration

我需要遍历存储过程中的记录集,并使用每个字段作为参数执行另一个存储过程。我无法在代码中完成此迭代。我在互联网上找到了样本,但它们似乎都在处理一个柜台。我不确定我的问题是否涉及柜台。我需要一个的T-SQL等效项,每个

当前,我的第一个存储过程将其记录集存储在临时表#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')

光标:
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

这就是为什么我使用Raise Error而不是PRINT进行输出的原因。
http://structuredsight.com/2014/11/24/wait-wait-dont-tell-me-on-second-thought/

关于sql-server-2005 - 如何遍历存储过程中的记录集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2622230/

相关文章:

sql-server - 如何使用换行符或段落将文本存储在数据库中

mysql - 删除重复的指纹条目

sql-server-2005 - 如何将 ILMerge 与 SQL Server 2005 CLR 程序集和 XmlSerializer 一起使用

用于选择包含一组值的所有组的 SQL 语句

sql - UDA 生成错误,缓冲区大小不足

sql - 在 SQL 中获取当前年份

sql-server - 从表中选择特定记录

sql-server-2008 - 在 SQL Server 2008 中使用 CONTAINS 创建存储过程

php - MySQL 存储过程比较每行的日期字段并根据 curdate() 进行更新

sql - 使用带索引的实际非规范化表而不是索引 View 对 SQL 查询性能更好?