我有一种情况,我需要重复执行一个存储过程 现在,此过程(spMAIN)中有一个光标,其中从表中查找值为T1,具有以下结构重复执行存储过程
ID Status
---- --------
1 New
2 New
3 success
4 Error
现在光标查找所有行的状态为“新建”
现在同时处理,如果光标的该实例遇到错误时,另一SP说spError需要被调用,“状态” T1中的列需要更新为'错误',并且需要再次调用spMAIN,它再次重复该过程,查找行与'新'
我该怎么做?另外,当我们谈论它的时候,如果一个SP内部有其他SP,并且如果这些SP中的任何一个产生了错误,同样的事情需要完成,T1表需要被更新('错误')并且需要再次调用spMAIN。
你能推荐些什么吗?
这里的一些代码
ALTER PROC zzSpMain
AS
BEGIN
DECLARE @id INT
BEGIN TRY
IF EXISTS (SELECT *
FROM dbo.zzTest
WHERE istatus = 'new')
BEGIN
DECLARE c CURSOR
FOR SELECT id
FROM zztest
WHERE istatus = 'new'
OPEN c
FETCH NEXT FROM c INTO @id
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @id
IF @id = 2
BEGIN
UPDATE zztest
SET istatus = 'error'
WHERE id = @id
RAISERROR ('Error occured', 16,
1)
END
UPDATE zztest
SET istatus = 'processed'
WHERE id = @id
FETCH NEXT FROM c INTO @id
END
CLOSE c
DEALLOCATE c
END
END TRY
begin CATCH
EXEC zzSpError
END CATCH
END
任何时候,我看到一个光标,我通常一定有一个更好,更RDBMS集式的方式来做到需要什么。 – Joe 2010-06-09 01:11:09