多个IF语句在catch块回滚
问题描述:
我需要一些帮助大声笑!我有一个带有try/catch块的存储过程。所以它工作正常,但是当我尝试通过放入应该碰到catch块的值进行测试时,它似乎并没有这样做。我的catch块有没有错,它不会回滚事务?就像坏数据被放入数据库一样,即使它不应该。我究竟做错了什么??先谢谢你!多个IF语句在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
答
渔获只能如果INSERT
有例外,在查询中有2个可能的情况,以提高例外,否则CATCH
NEVER到达。
- 您对PRQID和NEWID()主键生成一个重复的值(这是不可能发生的)
- 您对PRQCommand或PRQCDSRNO唯一索引,并且您提供非空值,它已经存在在表
更好的方法是将变量检查插入之前,然后回滚没有任何条件。
答
试试这个
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
+0
我会试试这个。谢谢! –
哦,你说的对!我忘了尝试/捕捉如何工作的基础知识!谢谢。 –