我相信常常有同窗想刪除某一個表時,遇到這樣或那樣的約束沒法刪除一頭霧水,這時您請不要着急,先看看如下提供的刪除全部約束、表、視圖等sql腳本,或在測試環境試用。 可是您也能夠僅刪除某一個對象(表)的全部約束或所有約束,您只須要把遊標裏用到的SELECT查詢語句單獨拿出來執行一下,本身看看就明白了,刪除了表的全部約束、視圖以後就能夠刪除表了。sql
1 --刪除全部外鍵約束 2 DECLARE @SQL VARCHAR(99) 3 DECLARE CUR_CONSTRAINT CURSOR LOCAL FOR 4 SELECT 'ALTER TABLE ' + CASE WHEN O.schema_id IS NOT NULL THEN (SELECT NAME+'.' FROM sys.schemas WHERE schema_id = O.schema_id) ELSE '' END 5 + Object_name(parent_object_id) 6 + ' DROP CONSTRAINT ' 7 + Object_name(object_id) 8 FROM sys.objects AS O 9 JOIN sys.schemas AS S 10 ON O.schema_id = S.schema_id 11 WHERE O.type IN( 'C', 'D', 'F' ); 12 13 OPEN CUR_CONSTRAINT; 14 FETCH CUR_CONSTRAINT INTO @SQL; 15 WHILE @@FETCH_STATUS = 0 16 BEGIN 17 EXEC(@SQL); 18 FETCH CUR_CONSTRAINT INTO @SQL; 19 END; 20 21 CLOSE CUR_CONSTRAINT; 22 DEALLOCATE CUR_CONSTRAINT; 23 24 --刪除全部視圖(存儲過程、函數等用一樣的方法) 25 DECLARE @SQL VARCHAR(99); 26 DECLARE CUR_VIEW CURSOR LOCAL FOR 27 SELECT 'IF OBJECT_ID(''' + CASE WHEN O.schema_id IS NOT NULL THEN (SELECT NAME+'.' FROM sys.schemas WHERE schema_id = O.schema_id) ELSE '' END 28 + Object_name(object_id) + ''') IS NOT NULL'+ 29 + ' DROP VIEW ' + CASE WHEN O.schema_id IS NOT NULL THEN (SELECT NAME+'.' FROM sys.schemas WHERE schema_id = O.schema_id) ELSE '' END + Object_name(object_id) 30 FROM sys.objects AS O 31 JOIN sys.schemas AS S 32 ON O.schema_id = S.schema_id 33 WHERE O.type IN( 'V' ); 34 35 OPEN CUR_VIEW; 36 FETCH CUR_VIEW INTO @SQL; 37 WHILE @@FETCH_STATUS = 0 38 BEGIN 39 EXEC(@SQL); 40 FETCH CUR_VIEW INTO @SQL; 41 END; 42 CLOSE CUR_VIEW; 43 DEALLOCATE CUR_VIEW; 44 45 -- 刪除全部表 46 DECLARE @SQL VARCHAR(99); 47 DECLARE CUR_TABLE CURSOR LOCAL FOR 48 SELECT 'DROP TABLE ' + CASE WHEN O.schema_id IS NOT NULL THEN (SELECT NAME+'.' FROM sys.schemas WHERE schema_id = O.schema_id) ELSE '' END + O.name 49 FROM sys.objects AS O 50 JOIN sys.schemas AS S 51 ON O.schema_id = S.schema_id 52 WHERE O.type = 'U'; 53 54 OPEN CUR_TABLE; 55 FETCH CUR_TABLE INTO @SQL; 56 57 WHILE @@FETCH_STATUS = 0 58 BEGIN 59 EXEC(@SQL); 60 FETCH CUR_TABLE INTO @SQL; 61 END 62 CLOSE CUR_TABLE; 63 DEALLOCATE CUR_TABLE;