![]() |
1
10
到目前为止,SQL Server不支持它们。你要解决的问题是什么? |
![]() |
2
22
OT:有很多事情SQL Server不支持,但在企业环境中是有意义的:
所有这些小东西都构成了许多引用完整性和事务性特性,您可以从全尺寸的RDBMS中期望这些特性在SQL Server中几乎是无用的。例如,由于不支持可延迟的约束,因此将“事务”作为外部一致的工作单元的概念被部分否定,唯一可行的解决方案(除了一些肮脏的解决方案)就是根本不定义引用完整性约束。我希望,事务的自然行为是,您可以按照自己喜欢的操作方式和顺序在事务内部工作,并且系统将确保在提交事务时它是一致的。 类似的问题也来自于限制,即带有on-delete级联的引用完整性约束只能以只有一个约束才能导致对象的级联删除的方式定义。这真的不适合大多数现实场景。 |
![]() |
3
3
显然不是。 我发现大约五篇不同的博客文章都说sqlserver(在不同版本中)不支持可推迟的约束。 另一方面,我还发现了一个帖子,试图通过使用 "persisted computed columns," (滚动到最后一个条目),但是 买者弃权 |
![]() |
4
3
听起来您的问题是,SQL不支持什么日期,而Darwin称之为“多重分配”。标准SQL对此的响应是“可延迟约束”,SQL Server不支持这种约束。SQL Server FK或CHECK约束可以标记为NOCHECK,但不完全相同。有关更多详细信息,请参阅msdn: ALTER TABLE (Transact-SQL) . |
![]() |
5
1
如果您有自己的ORM层,解决问题的一个方法是通过ORM层的逻辑将对象更新与引用更新分开。 然后,您的ORM将根据您的客户端更改集,分几个步骤处理事务:
这应该解决您的问题,因为所有引用的对象在任何时候都存在一个外键值… |
![]() |
6
1
有一种方法可以解决丢失的延迟约束强制 在一定条件下 (截至2017年1月,不支持SQL Server中的延迟约束)。考虑以下数据库架构: 免责声明:模式或用例的质量在这里不值得讨论,它被作为解决方法的基本示例给出。
其中类型是代理项的某个合适的数据类型。假设代理键的值由RDBMS在插入操作(即标识)期间分配。 用例是保留nextid=空的实体t的“最新”版本,并通过维护单个链接列表t.nextid->t.id来存储以前的版本。 显然,给定的模式会受到延迟约束问题的影响,因为新的“最新”版本的插入必须先于旧的“最新”版本的更新,在此期间,数据库中将有两个具有相同nextid值的记录。 现在,如果: 主键的数据类型不必是数字,可以预先计算(即uniqueidentifier),然后使用merge语句避免延迟约束问题,如:
显然,merge语句在检查约束之前完成了所有数据操作。 |
![]() |
7
0
你可以用这个方法
你行动
|
|
Johnny T · 基于当前值的SQL合并表[重复] 6 月前 |
![]() |
John D · 需要为NULL或NOT NULL的WHERE子句 7 月前 |
![]() |
ojek · 如何对SQL结果进行分组和编号? 7 月前 |
![]() |
senek · 如何在PL/SQL中将选择结果(列)放入数组中 7 月前 |
![]() |
Sax · 规范化Google表格(第一步) 7 月前 |
![]() |
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 7 月前 |
![]() |
Andrus · 如何在sql中查找第二个匹配项 7 月前 |