SQL更新触发器

时间:2012-02-07 10:14:51

标签: sql stored-procedures triggers

我希望在更新表时触发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

有人能指出我正确的方向吗?

谢谢:)

1 个答案:

答案 0 :(得分:2)

您遇到的问题是,当一个或更多行更新时,将触发一个触发器。目前,您假设触发器将针对每一行触发,这在SQL Server中不是这样。

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

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

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

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