Sql 我应该使用information_schema.referential_约束还是sys.foreign_键来检查键';谁的存在?

Sql 我应该使用information_schema.referential_约束还是sys.foreign_键来检查键';谁的存在?,sql,sql-server,tsql,foreign-keys,Sql,Sql Server,Tsql,Foreign Keys,在删除之前,我一直在检查外键是否存在,如下所示: 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\u keys表也保存了这些信息,现

在删除之前,我一直在检查外键是否存在,如下所示:

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\u keys
表也保存了这些信息,现在我不确定哪一个是最好的


我的猜测是,如果我知道我将只删除FK,那么我应该使用
sys.foreign_keys
,但是如果我不知道要删除哪种类型的约束,我应该使用前一种方法。这是正确的吗?我是否遗漏了任何重要的区别?

如果您仅使用MS SQL server,我建议使用sys schema中的视图,因为您可以获得更多信息。sys模式由MS SQL定义。您可以获得MS SQL特定的各种信息,并且在其他DBMS中没有对应的信息


如果您关心可移植性,如果您想遵守其他数据库,请使用INFORMATION_SCHEMA,因为这是跨数据库ISO标准。任何声称支持此标准的数据库都必须以相同的方式返回数据。因此,这种方法有局限性。

这是MS SQL特有的,因此我想我将更改内容以使用sys模式。但这是非常有用的知道,谢谢