日期:2014-05-18  浏览次数:20409 次

有关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