我使用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