2012-02-07 110 views
0

我希望在更新表時觸發SQL觸發器。我有一個名爲SimActivation的表和一個名爲spUpdateMnpDate的存儲過程,它接受兩個參數msisdn(varchar)和date(datetime)。SQL更新觸發器

當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 

任何人都可以點我在正確的方向?

謝謝:)

回答

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 

連接表保證了它會爲一個工作或許多更新的行。