插入触发器后....循环播放

时间:2011-08-31 14:47:04

标签: tsql stored-procedures sql-server-2005 triggers

如果我在表上创建了“After Insert”触发器并且在该触发器中我执行了一个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 :(得分:0)

设计明智,阅读评论,我认为你并不需要在触发器中这样做。我会说你应该在事务中作为插入语句的一部分来做 - 即执行插入,然后执行你想要做的循环(不管那样做 - 执行dbo.sp_Create_View_Client)......

我要提到的第二件事是dbo.sp_Create_View_Client究竟在做什么 - 它是否必须依赖于插入?意思是,如果插入工作正常,触发器失败会发生什么?我可以在一个事务中完成整个插入和执行SP,以保持数据完整性。