【问题标题】:SQL update triggerSQL 更新触发器
【发布时间】:2012-02-07 10:14:51
【问题描述】:

我希望在更新表时触发 SQL 触发器。我有一个名为 SimActivation 的表和一个名为 spUpdateMnpDate 的存储过程,它接受两个参数,msisdn(varchar) 和 date(datetime)。

当 SimActivation 表更新时,我想用新值调用该过程。

这是我现在得到的,在来回更改之后:

USE StoreSale;
GO
CREATE TRIGGER dbo.tSyncMnpDate
ON [dbo].[SimActivation]
AFTER UPDATE
AS      
    DECLARE @date datetime
    DECLARE @msisdn varchar(10)
    SET @date = (select ProcessDate from inserted)
    SET @msisdn = (select Msisdn from inserted)
    EXEC [spUpdateMnpDate] 
    @msisdn, @date;

GO

谁能指出我正确的方向?

谢谢:)

【问题讨论】:

    标签: sql stored-procedures triggers


    【解决方案1】:

    您遇到的问题是当一个 或多个 行被更新时会触发一个触发器。目前,您假设您的触发器将为每一行触发,而 SQL Server 中并非如此。

    如果您尝试调用的存储过程相当简单,我会将代码从那里拉出并放入触发器中。但请记住,您正在处理 sets 已更改的行(即使更改仅针对一行),因此您必须相应地编写 SQL。

    编辑:我假设您的程序正在更新 PK 等于 @msisdn 的日期,如果是这样,您可以在触发器中执行此操作:

    UPDATE Your_Table
    SET Your_Table.ProcessDate = inserted.ProcessDate
    FROM Your_table INNER JOIN inerted ON Your_Table.Msisdn = inserted.Msisdn
    

    加入表格可确保它适用于一个或多个更新的行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-03
      • 2011-06-03
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      相关资源
      最近更新 更多