sql - 循环遍历临时表的所有行并为每一行调用一个存储过程

标签 sql sql-server stored-procedures foreach

我已经声明了一个临时表来保存所有必需的值,如下所示:

    DECLARE @temp TABLE
    (
    Password INT,
    IdTran INT,
    Kind VARCHAR(16)
    )

INSERT INTO @temp
SELECT  s.Password, s.IdTran, 'test'
from signal s inner join vefify v 
    on s.Password = v.Password 
and s.IdTran = v.IdTran 
and v.type = 'DEV' 
where s.[Type] = 'start' 
AND NOT EXISTS (SELECT * FROM signal s2
            WHERE s.Password = s2.Password 
            and s.IdTran = s2.IdTran 
            and s2.[Type] = 'progress' )

INSERT INTO @temp
SELECT  s.Password, s.IdTran, 'test'
FROM signal s inner join vefify v 
    on s.Password = v.Password 
and s.IdTran = v.IdTran 
and v.type = 'PROD' 
where s.[Type] = 'progress' 
AND NOT EXISTS (SELECT * FROM signal s2
            WHERE s.Password = s2.Password 
            and s.IdTran = s2.IdTran 
            and s2.[Type] = 'finish' )
            
            
            

现在我需要循环遍历 @temp 表中的行,并为每一行调用一个 sp,它将 @temp 表的所有参数作为输入。 我怎样才能实现这个目标?

最佳答案

你可以使用光标:

DECLARE @id int
DECLARE @pass varchar(100)

DECLARE cur CURSOR FOR SELECT Id, Password FROM @temp
OPEN cur

FETCH NEXT FROM cur INTO @id, @pass

WHILE @@FETCH_STATUS = 0 BEGIN
    EXEC mysp @id, @pass ... -- call your sp here
    FETCH NEXT FROM cur INTO @id, @pass
END

CLOSE cur    
DEALLOCATE cur

关于sql - 循环遍历临时表的所有行并为每一行调用一个存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22618968/

相关文章:

t-sql - 如何根据参数是否为空或空字符串在存储过程中设置参数

sql - T-SQL : Single-Query Join with either one Table or another

mysql - 如何在单个列中获取多个列的行值?

sql - 将触发器从一个数据库复制到另一个数据库

sql-server - 寻找测试存储过程的最佳实践?

java - 如何从 plsql 中的存储过程获取 java 代码中的结果集

c# - 如何使用c#代码检查sql server中是否存在存储过程

mysql - 合并 MySQL 中的计数行

php - SQL:仅根据主键列将缺失行从一个表复制到另一个表

使用 IF 进行 SQL 字符串比较