【问题标题】:How to run trigger separate of table如何单独运行表的触发器
【发布时间】:2013-07-14 03:43:26
【问题描述】:

我有一个如下图所示的触发器:

ALTER TRIGGER [dbo].[areftblSalesDoc] ON [dbo].[tblSalesDoc]
AFTER INSERT
AS
Begin Try
    INSERT INTO ArefSms
        (DSIDName, SalesID, CustName, CustCellPhone, Fish, qt, ProdName)
    SELECT
        td.DSName, i.SalesID, tc.CustName, tc.CustCellPhone, i.Fish, NULL, NULL
        FROM inserted i
        left join tblDistributionStationDesc td on i.DSID = td.DSID
        left join tblCustomerDesc tc on i.CustomerID = tc.CustID

End Try
Begin Catch

End catch

当触发器无法保存任何内容并且出现错误tblsalesdoc 也无法保存时。但我不想那样。

我能做什么?

【问题讨论】:

  • 什么?!?!?请解释一下 - 这绝对不清楚 - what 你想做什么? “常规”触发器总是附加到表(除非您说的是 DDL 触发器,它记录诸如 CREATE TABLE 之类的内容)
  • 你的问题是什么。请改写。

标签: sql-server-2008 tsql triggers


【解决方案1】:

如果你想在出错的情况下跳过触发代码,你可以尝试使用SAVE TRANSACTION语句

ALTER TRIGGER [dbo].[areftblSalesDoc] ON [dbo].[tblSalesDoc]
AFTER INSERT
AS

SAVE TRANSACTION BeforeInsertInTrigger;

Begin Try
    INSERT INTO ArefSms
        (DSIDName, SalesID, CustName, CustCellPhone, Fish, qt, ProdName)
    SELECT
        td.DSName, i.SalesID, tc.CustName, tc.CustCellPhone, i.Fish, NULL, NULL
        FROM inserted i
        left join tblDistributionStationDesc td on i.DSID = td.DSID
        left join tblCustomerDesc tc on i.CustomerID = tc.CustID

End Try
Begin Catch
   ROLLBACK TRANSACTION BeforeInsertInTrigger;
   RETURN
End catch

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多