SQL2008触发器RAISERROR,该如何解决

SQL2008触发器RAISERROR请教在这个触发器里使用RAISERROR向客户端抛出一个错误信息告知用户,同时也要删除

SQL2008触发器RAISERROR
请教在这个触发器里使用RAISERROR向客户端抛出一个错误信息告知用户,同时也要删除一笔单据,为什么DELETE语句(DELETE dbo.SHCBF WHERE BF001=@BF001)就不执行了,如果没有'RAISERROR',则可以执行,是不是RAISERROR和DELETE不能同时存在
以下是代码,谢谢,赐教!!
ALTER TRIGGER Tri_CheckBG013 
   ON  SHCBG 
   INSTEAD OF INSERT
AS 
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @BG013 DECIMAL(16,6),@SUMBG013 DECIMAL(16,6),@BF005 CHAR(10),@BG007 CHAR(4),@BG008 CHAR(11),@TA015 DECIMAL(16,6),@STRMESSAGE VARCHAR(200),@BG017 CHAR(1),@BF001 CHAR(20)
SELECT @BF001=LTRIM(RTRIM(BG001)),@BF005=BF005,@BG007=BG007,@BG008=BG008,@BG013=BG013,@BG017=BG017 FROM INSERTED A
INNER JOIN dbo.SHCBF B
ON A.BG001=B.BF001 
IF @BG017 = '1'
   BEGIN
SELECT @SUMBG013=SUM(BG013) FROM dbo.SHCBF A
INNER JOIN dbo.SHCBG B
ON A.BF001=B.BG001
WHERE A.BF005=@BF005 AND BG007=@BG007 AND BG008=@BG008
SELECT @TA015=TA015 FROM ad2011.dbo.MOCTA
WHERE TA001=@BG007 AND TA002=@BG008
SET @STRMESSAGE ='工艺:'+@BF005+',累计报工量:'+CAST((ISNULL(@BG013,0)+ISNULL(@SUMBG013,0)) AS VARCHAR)+ '不可大于工单:'+@BG007+'-'+@BG008+'预计产量:'+CAST(@TA015 AS VARCHAR)+','+@BF001;
IF ISNULL(@BG013,0)+ISNULL(@SUMBG013,0) > @TA015+@TA015*0.1
   BEGIN
     BEGIN
      BEGIN TRAN
DELETE dbo.SHCBF WHERE BF001=@BF001;
      COMMIT TRAN
     END
     BEGIN
      BEGIN TRAN
  RAISERROR(@STRMESSAGE,16,1) WITH NOWAIT;
  COMMIT TRAN
 END
   END
ELSE
   BEGIN
  INSERT INTO dbo.SHCBG
  SELECT * FROM INSERTED
   END
   END
ELSE
   BEGIN
   INSERT INTO dbo.SHCBG
   SELECT * FROM INSERTED
   END
    -- Insert statements for trigger here

END SQL


[解决办法]
RAISERROR(@STRMESSAGE,16,1) WITH NOWAIT; 的作用是什么?
[解决办法]

引用:
Quote: 引用:

RAISERROR(@STRMESSAGE,16,1) WITH NOWAIT; 的作用是什么?


向客户端抛出一个信息,告知这笔单有问题,不能保存!

    BEGIN
       BEGIN TRAN
   RAISERROR(@STRMESSAGE,16,1) WITH NOWAIT;
   COMMIT TRAN
这些代码没必要用      BEGIN TRAN啊,直接写在上面的 DELETE COMMIT TRAN之后就可以了
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

RAISERROR(@STRMESSAGE,16,1) WITH NOWAIT; 的作用是什么?


向客户端抛出一个信息,告知这笔单有问题,不能保存!

    BEGIN
       BEGIN TRAN
   RAISERROR(@STRMESSAGE,16,1) WITH NOWAIT;
   COMMIT TRAN
这些代码没必要用      BEGIN TRAN啊,直接写在上面的 DELETE COMMIT TRAN之后就可以了


这个不是主要问题,之前就是放在一个BEGIN TRAN ... COMMIT TRAN,现在的问题是没有执行DELETE语句,不知道是不是RAISERROR的影响

你去掉就可以了吗?尝试在DELETE后面加一段代码比如插入数据到其他表看看到底有没有执行。