2011-05-23 64 views
3

我一直在檢查外鍵的存在,刪除像這樣前:我應該使用information_schema.referential_constraints或sys.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表保存這些信息,以及,現在我不知道這是最好。

我的猜測是,如果我知道我會被刪除FKS那麼我應該使用sys.foreign_keys,但如果我不知道我什麼下探約束類型我應該使用前一種方法。它是否正確?我錯過了任何重要的區別?

回答

4

如果您僅使用MS SQL Server,我建議使用sys架構中的視圖,因爲您可以獲得更多信息。 sys模式由MS SQL定義。您可以獲得各種MS SQL特定的信息,並且在其他DBMS中沒有對應的信息。

如果您擔心可移植性,如果您想遵守其他數據庫,請使用INFORMATION_SCHEMA,因爲這是跨數據庫ISO標準。無論聲稱支持該標準的數據庫必須以相同的方式返回數據。因此這種方法有侷限性。

+0

這是非常具體的MS SQL,所以我想我會改變使用sys模式的東西。但這是非常有用的知道,謝謝 – Alex 2011-05-24 08:04:38

相關問題