在sql server 2008中打印
在事务中,我要打印一条错误消息。我的问题是,即使没有错误,我仍然在屏幕上打印一个。我怎么修理它? 包含打印语句的事务:在sql server 2008中打印,sql,sql-server,Sql,Sql Server,在事务中,我要打印一条错误消息。我的问题是,即使没有错误,我仍然在屏幕上打印一个。我怎么修理它? 包含打印语句的事务: begin tran update_products_and_machine IF EXISTS ( select* from TblMachine where tblMachine.machineNumber = @machineNum and tblMachine.i
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';
如果您试图在事务在插入时失败时打印错误,则第二个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
如果插入失败,这将导致错误。如果第一个块中的两个项目没有找到,它们正在查找是否存在,如果不存在,这是一个错误-这是一个已完成的事务,没有找到任何内容?您需要将打印移到If@@error 0 begin行下您应该能够在回滚传输后移动打印“error”。Jeff/Jimbo,当我按照您的建议执行时,我根本没有收到错误消息,即使有错误Hey Dustin,这个解决方案在有错误时不会打印错误,它所做的只是打印:命令已成功完成您是在解析查询还是在执行查询?您使用的是什么版本的sql?我运行了查询并获得了Sql 2008的预期结果。请尝试运行以下操作:如果@@ERROR 0开始打印“ERROR”;Print@@ERROR end Print“无错误”在将导致错误的语句开头添加一行。它应该可以工作这应该可以工作…只需复制和粘贴:causeError if@@ERROR 0开始打印“ERROR”;终止
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