我希望在更新表时触发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
有人能指出我正确的方向吗?
谢谢:)
答案 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
加入表格可确保它适用于一个或多个更新的行。