SQL Stored Proc: помощь в преобразовании в триггер - PullRequest
0 голосов
/ 16 сентября 2010

Я хотел бы преобразовать сохраненный процесс в триггер. Предполагается, что хранимый процесс запускается после вставки / обновления, но пользователи забывают выполнять его чаще, чем нет!

Хранимая процедура вставляет пересчитанные значения для некоторых строк:

--Delete rows where RowCode=111
DELETE FROM dbo.TableA WHERE [year]>=1998 AND RowCode=111

--Insert new values for RowCode=111 for years>=1998
INSERT INTO dbo.TableA
SELECT [Year], RowCode=111, ColCode, SUM(Amt) AS Amt
FROM dbo.TableA
WHERE [Year]>=1998 AND RowCode IN (1,12,23) AND ColCode=14
GROUP BY [Year], ColCode

Я бы хотел включить это в триггер, чтобы пользователям не приходилось думать о запуске процедуры.

У меня началось следующее, но я не уверен, что я на правильном пути. Должен ли я использовать FOR, AFTER или INSTEAD OF?

CREATE TRIGGER TRIU_TableA 
ON TableA 
FOR INSERT,UPDATE AS

BEGIN
  SET NOCOUNT ON
  IF EXISTS (SELECT * FROM Inserted WHERE RowCode=111)
  BEGIN
    INSERT INTO TableA
    SELECT [Year], RowCode, ColCode, SUM(Amt) AS Amt
    FROM Inserted
    WHERE [Year]>=1998 AND RowCode IN (1,12,23) AND ColCode=14
    GROUP BY [Year], ColCode
  END

END

Любая помощь в том, как это сделать, будет очень признательна.

Большое спасибо
Mark

Ответы [ 2 ]

1 голос
/ 16 сентября 2010

Вы забыли удалить часть.

Но почему ваше приложение не запускает существующий процесс автоматически после каждой вставки / обновления? Люди обновляют вашу базу данных из окна запроса?

Сделайте триггер AFter, After и For одинаковы, но после используется более новый синтаксис.

0 голосов
/ 16 сентября 2010

Вы должны использовать FOR

При сравнении триггера с сохраненным процессом все выглядит хорошо.

Какие еще проблемы у вас есть?

...