我使用SQL Server 2008 R2SQL服務器觸發不插入
我有一個簡單的觸發
CREATE TRIGGER [dbo].[T_Personne_ITrig] ON [dbo].[Personne] FOR INSERT AS
BEGIN
SET NOCOUNT ON
insert into syn_HistoriquePersonne
(hpers_Timestamp, Supprime, ID, Nom, Prenom, Champ1,
Champ2, Champ3, Champ4 SiteAssocie)
select GETDATE(), 0, ID, Nom, Prenom, Champ1, Champ2, Champ3,
Champ4, SiteAssocie
from inserted
END
它可以正常工作。問題是,我工作的程序有一個可怕的代碼庫,所以我的老闆不想在表Personne
上觸發回滾,即使它失敗了。我知道這真的不太可能,但是他在數據庫活動巨大的情況下害怕超時...... ANYWAY
所以我搜索了觸發器中的提交。並改變了觸發:
CREATE TRIGGER [dbo].[T_Personne_ITrig] ON [dbo].[Personne] FOR INSERT AS
BEGIN
SET NOCOUNT ON
COMMIT
insert into syn_HistoriquePersonne
(hpers_Timestamp, Supprime, ID, Nom, Prenom, Champ1,
Champ2, Champ3, Champ4 SiteAssocie)
select GETDATE(), 0, ID, Nom, Prenom, Champ1, Champ2, Champ3,
Champ4, SiteAssocie
from inserted
END
但觸發保持拍攝消息
交易在觸發停止,批量中止。
所以我做了這樣的:
CREATE TRIGGER [dbo].[T_Personne_ITrig] ON [dbo].[Personne] FOR INSERT AS
BEGIN
SET NOCOUNT ON
COMMIT
BEGIN TRAN
insert into syn_HistoriquePersonne
(hpers_Timestamp, Supprime, ID, Nom, Prenom, Champ1,
Champ2, Champ3, Champ4, SiteAssocie)
select GETDATE(), 0, ID, Nom, Prenom, Champ1, Champ2, Champ3,
Champ4, SiteAssocie
from inserted
END
它停止這樣做批處理中止,但似乎從來沒有在我的歷史表中插入任何東西......我讀到的主題,這應該工作我認爲。但它不...
其他人已經有這個問題,我該如何解決?
我正在做簡單插入來測試我的觸發器。
只要不在你的觸發器中調用ROLLBACK,那麼你應該沒問題。不要在觸發器中啓動新的事務...觸發器應始終在引起它觸發的操作的上下文中執行。 – 2012-02-16 15:58:23
我不會在我的觸發器中調用回滾,但如果發生超時,應用程序將會返回。我知道tran tran並不是最佳選擇,但它確實會阻止錯誤信息。但真正的問題是爲什麼插入不工作... – 2012-02-16 16:01:14
但你說在你的第一個代碼片段:*它正常工作* - 那又有什麼問題?如果發生超時 - 在觸發器內部無法處理任何事情...... – 2012-02-16 16:02:15