Мой триггер работает вечно?Есть идеи почему? - PullRequest
0 голосов
/ 01 августа 2011

Я создал следующий триггер TSQL, который, кажется, работает всегда, когда обновляется базовая таблица.

CREATE TRIGGER Trigger_MDSS_ComputeAggregates
ON dbo.MonthlyDetectionScoresSums
AFTER UPDATE, INSERT
AS
BEGIN


update dbo.MonthlyDetectionScoresSums
SET
YPElec = CAST(COALESCE (i.YPLocChain_TotElec, i.YPGlobChain_TotElec, i.YPSIC_TotElec) AS real),
YPGas = CAST(COALESCE (i.YPLocChain_TotGas, i.YPSIC_TotGas) AS real)
from MonthlyDetectionScoresSums mdss
inner join INSERTED i on i.ACI_OI = mdss.ACI_OI

END
GO

Знаете ли вы, почему он может работать действительно очень долго?

Ответы [ 2 ]

5 голосов
/ 01 августа 2011

Могу ли я предложить вам использовать вычисленные столбцы и сбросить триггер?

ALTER TABLE dbo.MonthlyDetectionScoresSums ADD
    YPElec AS CAST(COALESCE (YPLocChain_TotElec, YPGlobChain_TotElec, YPSIC_TotElec) AS real)
    YPGas AS CAST(COALESCE (YPLocChain_TotGas, YPSIC_TotGas) AS real)

Из того, что я вижу, вы обновляете строки, которые вы только что обновили / вставили.Механизм БД сделает это за вас, и триггер не нужен.

2 голосов
/ 01 августа 2011

У вас включены рекурсивные триггеры?

Хотя бесконечный цикл должен быть прерван, возможно, если ваше обновление очень большое, потребуется много времени, чтобы достичь предела вложенности 32:

http://msdn.microsoft.com/en-us/library/ms190739.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...