0

在交易中,我想打印一条错误消息。我的问题是,即使没有错误,我仍然会在屏幕上打印一个。我如何解决它?交易,其中包含打印语句:

begin tran update_products_and_machine
IF  EXISTS (

                select*  
                from TblMachine  
                where tblMachine.machineNumber = @machineNum and tblMachine.isworking='true')
and  EXISTS  (
                select TblProduct.productNumber 
                from TblProduct 
                where TblProduct.productNumber = @ProductNum)

and not exists (select TblProduces.machineNumber, TblProduces.productNumber from TblProduces where TblProduces.productNumber=@productNum
and TblProduces.machineNumber=@machineNum)

 begin
insert into TblProduces(productNumber, machineNumber) values (@productNum,@machineNum)
end
if @@ERROR <>0 begin
rollback tran
end
commit tran update_products_and_machine
on_error: Print 'ERROR';
4

2 回答 2

0

SQLFiddle 复制并粘贴到 SQL Server(它只能在那里工作,因为 SQL Fiddle 不允许显式提交)。

如果您在PRINT事务失败时尝试“错误” INSERT,则第二个IF需要在第一个IF块内,因为第一个IF是是否存在某些东西,而不是是否存在错误。如果我们在表中没有找到任何东西,我们会得到错误吗?没有。而在这里:

BEGIN TRAN update_products_and_machine
IF  EXISTS (

            select*  
            from TblMachine  
            where tblMachine.machineNumber = @machineNum and 
tblMachine.isworking='true')
and  EXISTS  (
            select TblProduct.productNumber 
            from TblProduct 
            where TblProduct.productNumber = @ProductNum)

and not exists (select TblProduces.machineNumber, TblProduces.productNumber from  
TblProduces where TblProduces.productNumber=@productNum
and TblProduces.machineNumber=@machineNum)

BEGIN
insert into TblProduces(productNumber, machineNumber) values (@productNum,@machineNum)
     IF @@ERROR <> 0 
     BEGIN
          rollback tran
          Print 'ERROR';
     END
END

COMMIT TRAN update_products_and_machine

如果失败,这将出错INSERT。如果没有找到第一个块中的两个项目(它们正在寻找IF EXISTSIF NOT EXISTS),那怎么会是一个错误——它是一个没有找到任何东西的已完成交易?

于 2013-06-19T18:41:38.697 回答
0
begin tran update_products_and_machine
IF  EXISTS (

            select*  
            from TblMachine  
            where tblMachine.machineNumber = @machineNum and 
tblMachine.isworking='true')
and  EXISTS  (
            select TblProduct.productNumber 
            from TblProduct 
            where TblProduct.productNumber = @ProductNum)

and not exists (select TblProduces.machineNumber, TblProduces.productNumber from  
TblProduces where TblProduces.productNumber=@productNum
and TblProduces.machineNumber=@machineNum)

begin
insert into TblProduces(productNumber, machineNumber) values (@productNum,@machineNum)
end
if @@ERROR <>0 begin
rollback tran
Print 'ERROR';
end
commit tran update_products_and_machine
于 2013-06-19T17:20:38.227 回答