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

mer*_*zuu 26 sql sql-server foreach stored-procedures

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

    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' )
Run Code Online (Sandbox Code Playgroud)

现在我需要遍历@temp表中的行,并且对于每一行调用一个sp,它将@temp表的所有参数作为输入.我怎样才能做到这一点?

Zdr*_*nev 73

你可以使用游标:

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
Run Code Online (Sandbox Code Playgroud)