我应该使用information_schema.referential_constraints或sys.foreign_keys来检查密钥的存在吗?

时间:2011-05-23 16:42:30

标签: 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_keys表也包含这些信息,现在我不确定哪个是最好的。

我的猜测是,如果我知道我正在删除FK,那么我应该使用sys.foreign_keys,但如果我不知道我正在删除什么类型的约束我应该使用前一种方法。它是否正确?我错过了任何重要的差异吗?

1 个答案:

答案 0 :(得分:4)

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

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