SQL Server 2008 触发器错误删除

Posted

技术标签:

【中文标题】SQL Server 2008 触发器错误删除【英文标题】:SQL Server 2008 trigger error remove 【发布时间】:2012-10-22 07:02:07 【问题描述】:

我在 SQL Server 2008 中创建了一个触发器

CREATE TRIGGER [dbo].[ITEM_UOM_DELETE] ON
   [dbo].[ITEM_UOM] INSTEAD OF DELETE
   AS
      declare @rowc int
      set @rowc = (select count(*) from stock, deleted where 
      item = deleted.itemcode and uom = DELETED.MAINUNIT AND DOCTYPE <> 'OP')
         if @rowc > 0
         begin
           raiserror('Unit is in Use Cannot Delete', 16, 1)
           rollback transaction
         end

在执行此触发器时,它会给出错误输出

消息 50000,级别 16,状态 1,过程 ITEM_UOM_DELETE,第 11 行 单位正在使用中无法删除 消息 3609,第 16 层,状态 1,第 1 行 事务在触发器中结束。该批次已中止。

我只想要定义的错误

单位正在使用中无法删除

如何删除错误“事务在触发器中结束。批次已中止。 ?

【问题讨论】:

我已经通过删除 ROLLBACK TRANSACTION 来做到这一点,感谢您的回答 【参考方案1】:
CREATE TRIGGER [dbo].[ITEM_UOM_DELETE] ON
[dbo].[ITEM_UOM] INSTEAD OF DELETE
AS
BEGIN

declare @rowc int
select @rowc=count(*) from stock

if @rowc <= 0
begin
deleted uom from [ITEM_UOM] uom inner join deleted on uom.item = deleted.itemcode 
and uom.MAINUNIT = DELETED.MAINUNIT where uom.DOCTYPE <> 'OP'
end
else
begin
raiserror('Unit is in Use Cannot Delete', 16, 1)
end

end

【讨论】:

以上是关于SQL Server 2008 触发器错误删除的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 2008 R2 中为每个表创建创建触发器

SQL server 2008创建触发器实例

sql server 2008错误日志如何优化自动删除

SQL Server误删表恢复

SQL Server2008 触发器中,根据一个表修改另外一个表

sql server数据库怎样同时删除两张表的数据