SQL中删除所有约束、表、视图等脚本

--删除所有约束、表、视图等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 =扩展存储过程

 

时间: 2024-09-20 17:31:12

SQL中删除所有约束、表、视图等脚本的相关文章

怎么在sql中删除基本表?

问题描述 怎么在sql中删除基本表? 怎么在sql中删除基本表?用drop table 表名 cascade时,cascade有语法错,请大神指点啊 解决方案 drop table [cascade] 解决方案二: 将已经存在的表删除: DROP TABLE 表名; 你的语法错误不知道是不是表不存在这些 drop table 表名 cascade,后面这个不应该有cascade 解决方案三: 你第一次的命令是不是想解决约束性问题,你可以参考下面的语法 drop table 表名 cascade

数据库-新手求问,sql中用户对某一视图权力撤回后,要删除该视图吗

问题描述 新手求问,sql中用户对某一视图权力撤回后,要删除该视图吗 新手求问,sql中用户对某一视图权力撤回后,要删除该视图吗.如图所示,题目是撤回杨兰所授予的权力

sql中怎样在多表联合查询后的表中进行增删改操作,新手求大神详细讲解

问题描述 sql中怎样在多表联合查询后的表中进行增删改操作,新手求大神详细讲解 我在C#的winform的DataGridView中显示联合查询的结果,下面就是4张表的联合查询的语句,我需要在DataGridView显示的表中做删除操作,只需要知道删除的sql语句就行,用存储过程也好,级联删除也好,希望详细,我已经在这个问题上困扰很久了,万分感谢! 解决方案 在做C#桌面程序时,我们通常会遇到删除dataGridview中选中的一和或都多行数据,在网上查了好多方法,有些只能删除dataGridv

SQL中删除某数据库所有trigger及sp

原文:SQL中删除某数据库所有trigger及sp SQL中删除某数据库所有trigger及sp   编写人:CC阿爸   2014-6-14   在日常SQL数据库的操作中,如何快速的删除所有trigger及sp呢 以下有三种方式可快速处理.     --第一种 --事务的处理方法 Begin Transaction Begin try declare @SQL varchar(max) set @SQL='' select @SQL=@SQL+name+',' from sysobjects

SQL 中删除重复记录

在Database中可能由于某种原因如用户输入,导入数据失败等 导致了重复记录. 如果你没有用主键,约束,或来其它机制实现数据完整性,那最后总是重复记录在你的数据库中.现在让我们来看在SQL SERVER 2008中如何删除这些记录, 首先,可以模拟造一些简单重复记录:  代码如下 复制代码 Create Table dbo.Employee ([Id] int Primary KEY , [Name] varchar(50), [Age] int, [Sex] bit default 1)  

Oracle中删除用户和表空间的常见问题(比如:ORA-01940无法删除当前已连接用户的解决方案)

这时候以管理员身份进入sqlplus命令窗口. 在删除用户的时候有时候会出现以下问题: ORA-01940无法删除当前已连接用户 这时候的解决方案是: 1)查看用户的连接状况   select username,sid,serial# from v$session (2)找到要删除用户的sid,和serial,并删除 例如:你要删除用户'WUZHQ',可以这样做: alter system kill session'532,4562'; 这里的532表示的是sid,4562表示的是seria.

在SQL中删除重复记录(多种方法)

重复|重复记录  学习sql有一段时间了,发现在我建了一个用来测试的表(没有建索引)中出现了许多的重复记录.后来总结了一些删除重复记录的方法,在Oracle中,可以通过唯一rowid实现删除重复记录:还可以建临时表来实现...这个只提到其中的几种简单实用的方法,希望可以和大家分享(以表employee为例). SQL> desc employee  Name                                      Null?    Type ------------------

在SQL中删除重复记录的多种方法

学习sql有一段时间了,发现在我建了一个用来测试的表(没有建索引)中出现了许多的重复记录.后来总结了一些删除重复记录的方法,在Oracle中,可以通过唯一rowid实现删除重复记录:还可以建临时表来实现...这个只提到其中的几种简单实用的方法,希望可以和大家分享(以表employee为例). SQL> desc employee Name Null? Type ----------------------------------------- -------- -----------------

关于SQL中CTE(公用表表达式)(Common Table Expression)的总结_MsSql

一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分. 特别对于UNION ALL比较有用.因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高,所以可以使用WITH AS短语,则只要执行一遍即可.如果WITH AS短语所定义的表名