2011-08-31 98 views
2

如果我在表上創建了「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 

再次觀察觸發並不一定是語法糖的設計

+2

觸發器中的WHILE循環是一個非常糟糕的主意,並且是DB設計的代碼異味。如果你的設計**需要**,那麼某個地方的事情就會變得非常糟糕。 – JNK

+0

是的,這是我所知道的,但似乎是處理插入多行的可能性的唯一解決方案。正如我在SQL 2005標準工作。 – GoldBishop

+1

如果你發佈你的代碼,那麼也許有人能夠向你展示不同的可能性。 –

回答

0

設計智慧,閱讀評論,我覺得你不neccesarily需要做到這一點的觸發器。我會說你應該做它作爲插入語句在交易中的一部分 - 即做插入,然後做你想做的循環(無論做什麼 - 執行dbo.sp_Create_View_Client)...

第二我會提到的是dbo.sp_Create_View_Client究竟做了什麼 - 它是否必須依賴於插入?意思是,如果插入工作正常,觸發失敗會發生什麼?我可能會在一次事務中完成整個SP的插入和執行,以保持數據的完整性。

+0

它將創建可供新客戶端使用的視圖,因爲我還設置要分區的數據庫。我已經有了分區函數和Scheme,現在我試圖設置視圖。客戶端之間的視圖結構之間唯一不同的是它們的唯一ID。 – GoldBishop

+0

那麼,爲什麼你不在插入本身期間/之後做這個,而不是在觸發器上? –

+0

大多數情況下,插入將發生在網站上,我想包括必要的結構重新設計。重點是我基於客戶端ID在表格上實施分區,因此,插入後是完全基於客戶端的任何事情的最接近的時機,以及它們唯一的ID。 – GoldBishop