全部,
该页面特别讨论了从表中删除外键。在“示例”部分,Example D
展示了如何删除外键。
问题是这个例子使用了命名的外键约束,在这种情况下它是非常简单的语法。
但是,SQL Server 在使用外键创建表时不需要约束名称。
所以,我很好奇 - MSDN上的某处是否有一个示例显示如何删除未命名的外键约束?而且,为什么我引用的页面没有提供这样的例子?
TIA!
全部,
该页面特别讨论了从表中删除外键。在“示例”部分,Example D
展示了如何删除外键。
问题是这个例子使用了命名的外键约束,在这种情况下它是非常简单的语法。
但是,SQL Server 在使用外键创建表时不需要约束名称。
所以,我很好奇 - MSDN上的某处是否有一个示例显示如何删除未命名的外键约束?而且,为什么我引用的页面没有提供这样的例子?
TIA!
没有这样的声明,因为该
DROP CONSTRAINT
选项要求您命名要删除的约束。所以,不,我不希望它出现在 MSDN 上。虽然您可以在不显式命名的情况下创建约束,但它仍然有一个名称。这只是一种允许的便利,大概是因为大多数时候你会永久创建一个约束,以后不需要知道或关心名称是什么。通常,让系统为您的约束命名被认为是不好的做法,#temp 表上的某些类型的约束除外(由于并发冲突)。
我怀疑今天仍然允许使用该语法是为了防止向后兼容问题,而不是因为它是个好主意。事实上,如果我负责 MSDN 文档,我不会在下面描述删除未命名约束的方法,因为它所做的只是鼓励这种不良做法继续下去。
无论如何,要在不知道名称时删除约束,您需要手动查找(使用所涉及的表和列的名称),或者使用动态 SQL。这是后者的一个不完整但有效的示例:
您还可以在相同的两个表之间有多个外键(甚至 FK 指向同一个表),因此您可能希望在其中使用其他过滤器以确保删除正确的 FK。如果您命名约束而不是让系统命名它们,这应该会变得容易得多。