刪除了表的全部約束、視圖以及表

我相信常常有同窗想刪除某一個表時,遇到這樣或那樣的約束沒法刪除一頭霧水,這時您請不要着急,先看看如下提供的刪除全部約束、表、視圖等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;
相關文章
相關標籤/搜索