2013-03-25 54 views
1

我有以下腳本:如何刪除表和約束條件(如果存在)?

 ALTER TABLE [dbo].[TestAccount] DROP CONSTRAINT [TestAccount_Application]; 
     DROP TABLE [dbo].[TestAccount]; 

但是如果約束不存在腳本失敗。檢查存在的最好方法是什麼,然後只刪除約束和表(如果存在的話)?

+0

可能重複[如何檢查SQL Server的對象的存在,並降了嗎?](http://stackoverflow.com/questions/1140203/how -to-籤存在--A-SQL服務器對象和拖放的-它) – Pondlife 2013-03-25 14:21:09

回答

0

試試這個剛剛通過計數找到約束:

select CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_SCHEMA, TABLE_NAME 
    from INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
    where TABLE_NAME = 'TableName' 
    order by CONSTRAINT_TYPE asc -- FOREIGN KEY, then PRIMARY KEY 

然後,你可以刪除該約束和表。

1

你不是說什麼樣的約束是的 - 所以我要猜...

您可以使用SQL Server系統目錄視圖來檢查它們掉落之前是否存在的對象 - 是這樣的:

IF EXISTS (SELECT * FROM sys.default_constraint WHERE Name = 'TestAccount_Application') 
    ALTER TABLE [dbo].[TestAccount] 
    DROP CONSTRAINT [TestAccount_Application]; 

IF EXISTS (SELECT * FROM sys.tables WHERE Name = 'TestAccount') 
    DROP TABLE [dbo].[TestAccount]; 

正如我所說的 - 這取決於什麼樣的約束條件是,你必須檢查其它系統目錄視圖,如sys.check_constraintssys.foreign_keys來代替。

你可以閱讀更多有關係統目錄視圖上MSDN SQL Server Books Online