我最近在 Fowler 的 PofEA 中读到,一些数据库引擎允许您将 RI 检查推迟到事务结束。这在 SQL Server 中可行吗?
问题出现在我试图保存包括插入和删除在内的更改的某些情况下,确定执行操作以避免 RI 失败的正确顺序可能很棘手。我知道在交易结束时 RI 会很好,因此推迟这些检查似乎是理想的。
我最近在 Fowler 的 PofEA 中读到,一些数据库引擎允许您将 RI 检查推迟到事务结束。这在 SQL Server 中可行吗?
问题出现在我试图保存包括插入和删除在内的更改的某些情况下,确定执行操作以避免 RI 失败的正确顺序可能很棘手。我知道在交易结束时 RI 会很好,因此推迟这些检查似乎是理想的。
看起来 sql server 不允许这样做,但你不是唯一一个想要它的人。它是 SQL 92 标准的一部分,所以他们已经有 17 年的时间来弄清楚它。再说一次,MySQL 也不支持它(尽管 Oracle 支持)。
重新排序语句可能是您最好的选择。
您最好确定正确的顺序,以便交易可以在适当的时间失败。这应该是一次性的决定。
SQL Server 没有此功能。
我可以谦虚地建议,如果确定正确的插入顺序(或没有插入顺序)很棘手,那么您的数据库设计可能需要重构或至少非常仔细地检查。
如果您使用的是 SQL Server 2008,则可以使用MERGE将插入/删除组合到单个 RI 安全事务中...