在删除之前,我一直在检查外键是否存在,如下所示:
IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_NAME ='FK_Table1_Table2')
ALTER TABLE dbo.Table1
DROP CONSTRAINT FK_Table1_Table2
然后我突然想到有一个
sys.foreign_keys
表也保存了这些信息,现在我不确定哪个是最好的。我的猜测是,如果我知道我只会删除 FK,那么我应该使用
sys.foreign_keys
,但如果我不知道我要放弃什么类型的约束,我应该使用前一种方法。这样对吗?我是否遗漏了任何重要的差异?
最佳答案
如果您只使用 MS SQL 服务器,我建议使用来自 sys 架构的 View ,因为您可以获得更多信息。 sys 架构由 MS SQL 定义。您可以获得各种特定于 MS SQL 且在其他 DBMS 中没有对应信息的信息。
如果您关心可移植性,如果您想遵守其他数据库,请使用 INFORMATION_SCHEMA,因为这是跨数据库 ISO 标准。任何声称支持此标准的数据库都必须以相同的方式返回数据。因此这种方法有局限性。
关于sql - 我应该使用 information_schema.referential_constraints 还是 sys.foreign_keys 来检查 key 的存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6100280/