我需要一些帮助!
我有一个带try / catch块的存储过程。它工作正常但是当我尝试通过输入应该击中catch块的值进行测试时,它似乎没有这样做。我的catch块有什么问题,它没有回滚事务吗?就像坏数据被放入数据库中一样,即使它不应该。我究竟做错了什么??先感谢您!
begin try
Begin Transaction
Insert Into ProcessingRequestQueue(PRQID,PRQTarget, PRQStatus, PRQCommand, PRQCDSRNO)
Values (newid(),'CARDSIEVER','I',@PRQCommand,@cdsrno)
commit
End Try
Begin Catch
IF (@cdsrno = 0 and (@cdsrno is null or @cdsrno = ''))
or (@PRQCommand is null or @PRQCommand = '')
rollback
End Catch
END
答案 0 :(得分:0)
仅当INSERT
有异常时,此功能才有效,在您的查询中有两种可能的情况可以引发异常,否则会CATCH
从不。
更好的方法是在插入之前进行变量检查,然后在没有任何条件的情况下回滚。
答案 1 :(得分:0)
试试这个
BEGIN TRANSACTION
BEGIN TRY
INSERT ProcessingRequestQueue(PRQID,PRQTarget, PRQStatus, PRQCommand, PRQCDSRNO)
Values (newid(),'CARDSIEVER','I',@PRQCommand,@cdsrno)
IF @cdsrno = 0 OR @cdsrno is null or @cdsrno = '' or @PRQCommand is null or @PRQCommand = ''
BEGIN<br>
ROLLBACK TRANSACTION
END
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH