2012-02-07 4 views
0

Я хочу, чтобы триггер SQL запускался при обновлении таблицы. У меня есть таблица под названием SimActivation и хранимая процедура spUpdateMnpDate, которая принимает два параметра: msisdn (varchar) и date (datetime).SQL update trigger

Когда обновляется таблица 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 соответственно.

EDIT: Я предполагаю, что ваша процедура обновляет дату, когда PK равен @msisdn, если так что вы можете сделать это в триггере:

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

Объединение таблиц гарантирует, что будет работать для одного или много обновленных строк.