После вставки триггера .... зацикливание - PullRequest
2 голосов
/ 31 августа 2011

Какова была бы нагрузка обработки, если бы у меня был создан триггер «после вставки» в таблице, и в этом триггере я выполнил цикл While, чтобы перебрать «потенциально» несколько строк?

Конечным результатом являетсяУ меня в 99,999% случаев будет только 1 строка, но поскольку будущее непредсказуемо, я также хочу иметь возможность обрабатывать несколько вставляемых строк.

Модель триггера: 1) Вставить информацию в таблицу 2) Создатьвзгляды, специфичные для клиента, с помощью хранимых процедур (если это возможно)

Что вы говорите?:)

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

CREATE TRIGGER dbo.New_Client_Setup 
   ON  dbo.client 
   AFTER INSERT
AS 
BEGIN
    SET NOCOUNT ON;

    --Fill Temp Table
     select * into #clients
     from inserted

     --Iterate through Temp Table
     While (select count(*) from #clients) <> 0 BEGIN
         declare @id int, @clnt nvarchar(10)

         select top(1)
            @id = id
            , @clnt = short
         order by id desc

         Execute dbo.sp_Create_View_Client ( @id, @clnt )

         -- Drop used ID
         delete from #clients
         where id = @id
     END

     Drop table #clients
END
GO

Опять же, обратите внимание на дизайнтриггер не обязательно синтаксический сахар

1 Ответ

0 голосов
/ 07 сентября 2011

Дизайн мудрый, читая комментарии, я думаю, вам не обязательно делать это в триггерах.Я бы сказал, что вы должны сделать это как часть вашего оператора вставки в транзакциях - т.е. выполнить вставку, а затем выполнить цикл, который вы хотите выполнить (что бы это ни делало - выполнить dbo.sp_Create_View_Client) ...

Второе, что я хотел бы упомянуть, это то, что именно делает dbo.sp_Create_View_Client - обязательно ли это зависит от вставки?То есть, что произойдет, если вставка работает нормально, а триггер не работает?Возможно, я бы сделал всю вставку и выполнение SP в одной транзакции, чтобы сохранить целостность данных.

...