我有以下腳本:如何刪除表和約束條件(如果存在)?
ALTER TABLE [dbo].[TestAccount] DROP CONSTRAINT [TestAccount_Application];
DROP TABLE [dbo].[TestAccount];
但是如果約束不存在腳本失敗。檢查存在的最好方法是什麼,然後只刪除約束和表(如果存在的話)?
我有以下腳本:如何刪除表和約束條件(如果存在)?
ALTER TABLE [dbo].[TestAccount] DROP CONSTRAINT [TestAccount_Application];
DROP TABLE [dbo].[TestAccount];
但是如果約束不存在腳本失敗。檢查存在的最好方法是什麼,然後只刪除約束和表(如果存在的話)?
試試這個剛剛通過計數找到約束:
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
然後,你可以刪除該約束和表。
你不是說什麼樣的約束是的 - 所以我要猜...
您可以使用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_constraints
或sys.foreign_keys
來代替。
你可以閱讀更多有關係統目錄視圖上MSDN SQL Server Books Online
的
可能重複[如何檢查SQL Server的對象的存在,並降了嗎?](http://stackoverflow.com/questions/1140203/how -to-籤存在--A-SQL服務器對象和拖放的-它) – Pondlife 2013-03-25 14:21:09