2010-06-22 164 views
0

什麼是設置觸發器以獲取表中所有新行並將其插入到工作隊列表中的最佳方式。SQL觸發器插入

非常感謝 SP

+0

您使用的是什麼RDBMS和版本?觸發器語法各不相同。只要跟蹤最近處理的ID或以任何方式爲此添加日期時間列,您可能會更好? – 2010-06-22 13:15:37

+0

抱歉它是一個SQL Server 2000數據庫 – Steven 2010-06-22 13:18:36

回答

2

要回答這個問題你問

CREATE TRIGGER dbo.tr_i_BaseTable 
    ON dbo.BaseTable 
    AFTER INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT INTO WorkTable 
    SELECT * FROM INSERTED 

END 

但不是實際複製的行兩次你能不能用行的一些其他屬性來檢測應考慮工作臺的一部分,「新」的。如ID或添加「插入」日期/時間字段。

或另一種作法可能是剛與新工作臺重新開始,並考慮要歸檔所有以前的記錄。您可以創建(可能是分區)視圖UNION ALL - 這兩個表適用於需要在合併集上工作的那些查詢。

+0

我瞭解您與您的評論的到來。 數據庫表是一個正確的混亂和運行速度很慢,因此我想保持「工作隊列」數據分離。 感謝您的代碼,您已經完成了我的設想。 再次感謝 Sp 非常感謝 – Steven 2010-06-22 13:39:18

1

有了這個觸發器:

CREATE TRIGGER InsertIntoWorkingTable 
    ON VeryOldHugeDatabaseTable 
    INSTEAD OF INSERT 
AS 
    insert into WorkingTable (column1, column2, column3...) (
     select column1, column2, column3 
      from inserted 
    ) 

所有你需要做的就是保持插入到你的VeryOldHugeDatabaseTable。觸發器會忙於插入此工作表。

一旦一段時間,你可以簡單地通過一個工作什麼的都插入或存檔推出一個存儲過程到這個舊錶從工作表。

+0

我從他的「工作隊列」的評論得到的印象是,他是在插入主表和放置FK在一個單獨的表作爲某種行動項目連接到該行。 – Kendrick 2010-06-22 13:10:46

+0

我們有一個v數據庫表,最初建在訪問(它的噩夢),它目前只有80列寬,有1.5米行。它仍然被用於使用複雜的存儲過程爲下一個客戶提供服務,正如您可以想象的那樣,這個過程非常緩慢。我試着給所有新行傳輸到另一臺(7列,將只具有100-200行),一旦他們被虐待的工作將它們歸檔,這樣前端的用戶將看到的速度大幅增加.. 詩前端應用程序仍然是和訪問數據庫 – Steven 2010-06-22 13:15:17

+0

我現在看到了需要! =) – 2010-06-22 13:30:39

0

一種「T-SQL觸發」搜索返回這是第一個結果:

Create Trigger

除了語法,你幾乎回答了你自己的問題。在AFTER INSERT中設置一個觸發器並在其中放入一條插入語句。