SQL的存储过程里,其中一条语句出现错误,如何让整个存储过程都不执行

来源:百度知道 编辑:UC知道 时间:2024/06/08 13:50:52
我建了一个存储过程,其中有6条insert语句.
我想让它 只要其中一条出错就不能执行整个存储过程.要怎么做?
ALTER PROCEDURE [dbo].[Chejiaxinxi]
@frameid int ,
@frametype smallint,
@dateT smalldatetime,
@HJ VArchar(5),
@WBZL char(1),
@NBZL char(1),
@HJGS int,
@ZP1 VArchar(5),
@ZP2 VArchar(5)=null,
@ZP3 VArchar(5)=null,
@ZP4 VArchar(5)=null,
@zpcount tinyint,
@ZPGS int ,
@XJ1 VArchar(5),
@XJ2 VArchar(5) = null ,
@xjcount tinyint,
@XJGS int
AS
begin
SET NOCOUNT ON;

INSERT INTO [banhandb].[Production].[ChejiaProductHeader]([FrameID],[FrametypeID],[Date])VALUES(@frameid,@Frametype,@datet)
INSERT INTO [banhandb].[Production].[ChejiaProductRegister]([FrameID],[PersonNumber],[OperationID],[OutsideQuality],[InsideQuality],[Count],[ManHour])VALUES(
@frameid,@hj,1,@wbzl,@nbzl,1,@hjgs )
INSERT INTO [banhandb].[Production].[ChejiaProductRegister]([FrameID],[PersonNumber],[OperationID],[Coun

要用到事务处理
你每执行一个操作都会有一个@@error的系统变量
所以你可以根据这个系统变量来判断你的语句执行是否成功。
若是成功则提交失误,否则回滚事物就可以了。

declare @error int
begin transaction
SQL语句
@error=@error+@@erorr
...
if @error>0
rollback transaction
else
commit transaction
GO

就是这样子了

begin transaction

每执行一条语句把错误号累加 在最后判断

if @@error <> 0
rollback transaction
else
commit transaction

ALTER PROCEDURE [dbo].[Chejiaxinxi]
@frameid int ,
@frametype smallint,
@dateT smalldatetime,
@HJ VArchar(5),
@WBZL char(1),
@NBZL char(1),
@HJGS int,
@ZP1 VArchar(5),
@ZP2 VArchar(5)=null,
@ZP3 VArchar(5)=null,
@ZP4 VArchar(5)=null,
@zpcount tinyint,
@ZPGS int ,
@XJ1 VArchar(5),
@XJ2 VArchar(5) = null ,
@xjcount tinyint,
@XJGS int
AS
begin
SET NOCOUNT ON;

BEGIN TRAN
INSERT INTO [banhandb].[Production].[Ch