删除所有约束、表、视图等SQL脚本
作者:网络转载 发布时间:[ 2016/4/29 11:31:12 ] 推荐标签:数据库 SQL
我相信经常有同学想删除某一个表时,遇到这样或那样的约束无法删除一头雾水,这时您请不要着急,先看看以下提供的删除所有约束、表、视图等SQL脚本,或在测试环境试用。
但是您也可以仅删除某一个对象(表)的所有约束或全部约束,您只需要把游标里用到的SELECT查询语句单独拿出来执行一下,自己看看明白了,删除了表的所有约束、视图之后可以删除表了。
--删除所有约束、表、视图等SQL脚本
--###############################################
--删除所有外键约束
--###############################################
DECLARE @SQL VARCHAR(99)
DECLARE CUR_CONSTRAINT CURSOR LOCAL FOR
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
+OBJECT_NAME(parent_object_id)+' DROP CONSTRAINT '+OBJECT_NAME(object_id)
FROM sys.objects AS O JOIN sys.schemas AS S on O.schema_id=S.schema_id
WHERE O.type IN('C','D','F')
OPEN CUR_CONSTRAINT
FETCH CUR_CONSTRAINT INTO @SQL
WHILE @@FETCH_STATUS =0
BEGIN
EXEC(@SQL)
FETCH CUR_CONSTRAINT INTO @SQL
END
CLOSE CUR_CONSTRAINT
DEALLOCATE CUR_CONSTRAINT
--###############################################
--删除所有视图(存储过程、函数等用同样的方法)
--###############################################
--DECLARE @SQL VARCHAR(99)
DECLARE CUR_VIEW CURSOR LOCAL FOR
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
+OBJECT_NAME(object_id)
+''') IS NOT NULL'+
+' 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)
FROM sys.objects AS O JOIN sys.schemas AS S on O.schema_id=S.schema_id
WHERE O.type IN('V')
OPEN CUR_VIEW
FETCH CUR_VIEW INTO @SQL
WHILE @@FETCH_STATUS =0
BEGIN
EXEC(@SQL)
FETCH CUR_VIEW INTO @SQL
END
CLOSE CUR_VIEW
DEALLOCATE CUR_VIEW
--###############################################
-- 删除所有表
--###############################################
--DECLARE @SQL VARCHAR(99)
DECLARE CUR_TABLE CURSOR LOCAL FOR
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
FROM sys.objects AS O JOIN sys.schemas AS S on O.schema_id=S.schema_id
WHERE O.type='U'
OPEN CUR_TABLE
FETCH CUR_TABLE INTO @SQL
WHILE @@FETCH_STATUS =0
BEGIN
EXEC(@SQL)
FETCH CUR_TABLE INTO @SQL
END
CLOSE CUR_TABLE
DEALLOCATE CUR_TABLE
--###############################################
再提供一下SQL Server里的OBJECT_ID函数object_type参数类型
--###############################################
OBJECT_ID(object_name,object_type)
对象类型:
AF =聚合函数(CLR)
C = CHECK约束
D = DEFAULT(约束或独立)
F = FOREIGN KEY约束
FN = SQL标量函数
FS =大会(CLR)的标量函数
FT =程序集(CLR)表值函数
IF = SQL内联表值函数
IT =内部表
P = SQL存储过程
电脑大会(CLR)存储过程
PG =计划指南
PK = PRIMARY KEY约束
R =规则(旧式,单机)
RF =复制过滤过程
S =系统基表
SN =同义词
SQ =服务队列
TA =组件(CLR)DML触发器
TF = SQL表值函数
TR = SQL DML触发器
TT =表类型
U =表(用户定义)
UQ = UNIQUE约束
V =视图
X =扩展存储过程
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11