Я работаю с SQL Server 2008 R2.
У меня есть простой триггер
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
, даже если он терпит неудачу. Я знаю, что это действительно маловероятно, но он боится тайм-аута в случае огромной активности базы данных... В ЛЮБОМ СЛУЧАЕ
Поэтому я искал информацию о коммитах в триггерах. И изменил триггер на:
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
Он перестал прерывать пакет, но, похоже, никогда ничего не вставлял в мою историческую таблицу ... Я читал об этом, и я думаю, что это должно сработать. Но это не...
У кого-нибудь уже была такая проблема и как я могу это исправить?
Я делаю простую вставку, чтобы проверить свой триггер.
COMMIT
внутри своего триггера? Демс прав - удали. 16.02.2012