2012-01-31 52 views
0

我有TABLE_A和另一个数据库我有TABLE_B。 TABLE_A上有一个触发器来复制从TABLE_A到TABLE_B的插入。如果在触发器上失败,TABLE_A上的插入操作不会失败(我无法控制TABLE_A,可以删除或重命名列等等)。如果在触发器中失败,则在TABLE_A中插入不应失败。怎么样?

我与SQL Server 2005工作

我tryed TRY ... CATCH,但没有奏效。

谢谢。

+0

这是'AFTER INSERT'吗?你还试过什么?TRY ... CATCH? – JNK 2012-01-31 15:12:28

+0

我在CATCH中没有代码来忽略错误并继续,但是一直在回滚。 – Neves 2012-02-01 10:41:47

回答

3

使用触发器 - 是一个原子操作 - 它可以完成没有错误或失败整个操作(INSERT +触发器)。尝试使用其他变体,例如使用SP为表添加记录。

3

看看this other StackOverflow question

但最终,触发器会在与您正在查找的内容相反的隐式事务中运行。解决这个问题的另一种方法可能是你最好的选择。

2

我会把它移到异步风格的操作。对TABLE_A进行更改操作,将复制相应记录的请求排队,并使单独的进程监视该队列。这样,您不会将复制过程绑定到插入事务中,只有复制操作的排队与插入事务绑定。

+0

该排队过程如何实施? – Neves 2012-02-01 10:39:58

+0

@Neves由于数据显然不能完美同步(否则你会希望触发失败),某种程度的差异是可以接受的。问题将是这段时间应该是多长时间。如果更改量较低,则可以使用sp_start_job启动作业,也可以写入表并使定期计划的作业查看表并执行同步。我不确定在事务之外是否有高性能的更新 - 所有这些都会涉及在事务之外创建另一个连接(如通过SQLCLR)。 – 2012-02-01 13:52:00