我想在我的表數據更改時進行一些計算。但是,我正在手動更新我的表格,並一次複製粘貼大約3000行。這使我的觸發器工作了3000次,但我希望它只觸發一次。SQL Server觸發器工作 - 只觸發一次
有沒有辦法做到這一點?
謝謝。
我想在我的表數據更改時進行一些計算。但是,我正在手動更新我的表格,並一次複製粘貼大約3000行。這使我的觸發器工作了3000次,但我希望它只觸發一次。SQL Server觸發器工作 - 只觸發一次
有沒有辦法做到這一點?
謝謝。
如果通過「手動」,你的意思是你複製並粘貼到某個用戶界面工具(如Access dataGrid)或類似的東西,那麼該工具可能會在每行發出一個插入語句,在這種情況下,運氣不好的話,數據庫觸發器將在每個插入語句中執行一次。正如其他答案所提到的那樣,如果您可以使用單個插入語句將行直接插入數據庫中,那麼觸發器將只觸發一次。
你的聲明是什麼?
如果您有多個插入那麼它會觸發您正在運行的每個插入。如果你想讓它多刀片只執行一次,你必須:
insert into foo select * from bar
其他的可能性是:
,您的觸發不會閃光3000次。你的觸發器會觸發一次,虛擬「刪除」表中將有3000行。
我認爲通過'手動'的OP可能意味着他正在複製和粘貼到一些像訪問網格之類的UI工具或類似的東西,在這種情況下,該工具可能會發出每行一個插入語句...... – 2010-01-15 14:56:29
該問題是由於您手動粘貼3000行而引起的。你真的有2個解決方案。你可以這樣做關閉觸發:
ALTER TABLE tablename DISABLE TRIGGER ALL
-- do work here
ALTER TABLE tablename ENABLE TRIGGER ALL
,然後在運行觸發的內容然後結束或者你可以把你的3000列到一個臨時表,然後一次插入它們。這隻會設置1個觸發器。如果這還不夠,請給我們更多關於你想要做什麼的信息。
那麼我沒有明確的解決你的第一種解決方法。你說「在這裏工作」,但我正在手動做這項工作?你是什麼意思,我想我錯了。順便說一句我正在使用訪問時複製粘貼。 – stckvrflw 2010-01-15 15:08:29
我的意思是運行ALTER TABLE tablename DISABLE TRIGGER ALL,然後粘貼你的行,然後運行ALTER TABLE tablename ENABLE TRIGGER ALL。一旦完成,您需要運行觸發器中的腳本,以便更新所有這些行。 – 2010-01-15 16:49:07
如果您限制如何將數據導入到每行插入一次的系統中,我建議您將數據導入到中間表中,然後從中間表中插入到最終表中。
是的我正在使用訪問 – stckvrflw 2010-01-15 15:06:41
是的,正如我想的那樣......恐怕只要你堅持這樣做手動,通過訪問tableview(或任何被稱爲) - 你卡住了。 – 2010-01-15 16:31:12