在触发器中如何才能抛出我想要的异常

2zhenggang 2004-03-31 11:14:49
各位老大:
我有写了一个出库记录同步更新库存数量的触发器,但是在触发器执行中产生约束错误时,它直接退出了,抛出的是约束的错误信息,而不是我想要的那个。
这个问题该如何解决?

CREATE TRIGGER trGoodsOut_I ON dbo.GoodsOutRec FOR INSERT AS
BEGIN
DECLARE
@maxcard int,
@numrows int,
@numnull int,
@errno int,
@errmsg varchar(255)

SELECT @numrows = @@rowcount
IF @numrows = 0
RETURN

UPDATE GoodsStore
SET
Amount = b.Amount - a.Amount,
LastModifier = a.Creator,
LastModifyDate = a.CreateDate
FROM
Inserted a INNER JOIN GoodsStore b ON a.GoodsStoreID = b.GoodsStoreID /*这里在库存数量小于0时会引发一个约束错误*/
IF @@ERROR <> 0
BEGIN
SELECT @errno = @@ERROR, @errmsg = '在新增出库记录时更新库存数量失败!'
GOTO error
END



RETURN

/* Errors handling */
ERROR:
RAISERROR @errno @errmsg --(@errmsg, 16, 1)
ROLLBACK TRANSACTION
END
...全文
319 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cqdj 2004-04-02
  • 打赏
  • 举报
回复
没有太好的办法,因为对表的操作,作现是要检查约束的,如果你的约束条件没有通过,那触发器也就不触发了,如果你想要得到友好的错误提示,最好删除约束,在你的触发器里面检查条件,然后用raiserror来显示你的错误!
zb1119 2004-04-01
  • 打赏
  • 举报
回复
分太少,那也蹭。
sun1976 2004-03-31
  • 打赏
  • 举报
回复
create
sun1976 2004-03-31
  • 打赏
  • 举报
回复
raiserror ()

sp_addmessage
realgz 2004-03-31
  • 打赏
  • 举报
回复
And,more can be found in onlinehelp.
健者天行 2004-03-31
  • 打赏
  • 举报
回复
mark
realgz 2004-03-31
  • 打赏
  • 举报
回复
raiserror ()

sp_addmessage

so it's
2zhenggang 2004-03-31
  • 打赏
  • 举报
回复
up

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧