После вставки триггер вызывает хранимую процедуру для рекурсивного добавления строк в ту же таблицу не работает - PullRequest
0 голосов
/ 07 января 2020

У меня есть хранимая процедура, которая вставляет строки в таблицу. Намерение состоит в том, чтобы работать через вставленные строки с помощью триггера After Update, который будет рекурсивно вставлять строки в одну и ту же таблицу.

Минимальный триггер SPRO C ниже. Это работает только один раз; последующие вызовы SPRO C фактически вводят процедуру нормально, но вставки не выполняются.

В базе данных включены вложенные триггеры.

Кто-нибудь может помочь?

ALTER TRIGGER [dbo].[tr_Propogate]
   ON  [dbo].[EN_Propogations]
   AFTER INSERT
AS 
BEGIN
    SET NOCOUNT ON;
    DECLARE
        @PropogationID int,
        @ModelSection_ID int,
        @ModelComponent_ID int,
        @ErrorCode TinyInt;

    DECLARE CurPropogate CURSOR FOR SELECT PropogationID FROM INSERTED

    IF ((SELECT TRIGGER_NESTLEVEL()) > 10) RETURN

    OPEN CurPropogate;
    FETCH NEXT FROM CurPropogate INTO @PropogationID

    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @ModelSection_ID = (SELECT ModelSection_ID FROM INSERTED WHERE PropogationID = @PropogationID)
        SET @ModelComponent_ID = (SELECT ModelComponent_ID FROM INSERTED WHERE PropogationID = @PropogationID)
-- DISABLE TRIGGER tr_Propogate ON EN_Propogations
        EXEC dbo.EN_ModelSectionPropogate @ModelSection_ID, @ModelComponent_ID, @ErrorCode OUTPUT
-- ENABLE TRIGGER tr_Propogations ON EN_Propogations
        FETCH NEXT FROM CurPropogate INTO @PropogationID
    END
    CLOSE CurPropogate
END


ALTER PROCEDURE [dbo].[EN_ModelSectionPropogate] 
@ModelSection_ID int,
@ModelComponent_ID int,
@ErrorCode TinyInt OUTPUT

AS

BEGIN
        SET NOCOUNT ON;

...

    INSERT INTO EN_Propogations (ModelSection_ID, ModelSection_Ref, ModelComponent_ID, ModelComponent_Ref)
    SELECT * FROM ConnectedSections_CTE

END
...