有关SQL语句的批处理机制。
我有一个存储过程,里面包含了两句T-SQL语句。
CREATE PROCEDURE abc
@id varchar(30) AS
insert tb1(id,name) SELECT id,name from tb2 where id=@id
delete from tb2 where id=@id
go
因为id是tb1的唯一索引,索引当在tb1中插入重复id时会提示出错,insert语句插入失败。可是奇怪的是后面的delete语句还是执行了。结果插入失败而删除却成功了。
怎样让这两个语句作为一个整体来运行,插入失败就退出,不要删除了。
------解决方案--------------------加事务就行了.
CREATE PROCEDURE abc
@id varchar(30) AS
set xact_abort on
begin tran
insert tb1(id,name) SELECT id,name from tb2 where id=@id
delete from tb2 where id=@id
commit tran
go