2013-08-07 36 views
1

所以我跑了,成为一种如下的问题:
- 我有表A
- 我有表B中有一个外键表A
- 我对表格中的一个触发器,以确保在表格中的每一个项目都有表B中指向它至少有一行(通过外键)。
- 触发为“插入”命令运行。

现在的问题是,当我插入到表A中时,触发器会引发错误,因为表B中没有包含表A中新行的外键的行。表B中的行将在交易结束时插入,但触发器不会给我机会。

那么,什么是一个很好的解决这个问题?有没有办法告诉触发器只有在事务中的最后一条命令执行后才能运行?如何创建SQL Server中的触发器触发之前只权的交易将被提交

+0

为什么你使用触发器来强制执行外键关系?这已经完成** BY **外键给你。你想要的是上的一个触发做需要插入分为B –

+0

移动从表A中的触发器表B –

+0

马克乙 - 触发不是强制执行外键。触发将要强制执行表B中有至少在行引用表A. – AxiomaticNexus

回答

0

如果你需要一个触发条件上表A,但不知道是否有表B中的任何相应的行,不应该将“而不是”触发器使用。这将允许您将行插入到表A.如果在表B中的赛前检查表B,用插入到继续,否则,加行B,然后A,或跳过那不匹配的数据,并向应用程序返回错误。

http://msdn.microsoft.com/en-us/library/ms175521(v=SQL.105).aspx

+0

的问题是,我不能插入到表B中插入表之前A.请记住,在表B中的一列是一个外键表A,它不能被设置到表A中的行插入,并分配一个id,id然后将用于表B中的外键列。 – AxiomaticNexus

+0

您将无法在触发器的范围之外执行所需的操作。您可以使用表A中的代替触发器来执行插入操作,然后使用output子句来加载表B. –