场景:
SQL Server中,需要删除所有表或所有存储过程时,手动的方式只能逐个进行删除,耗个人时间,所以想弄个语句来实现这样的需求。
 

如果由于外键约束删除table失败,则先删除所有约束:

--/第1步**********删除所有表的外键约束*************************/

 DECLARE c1 cursor for
select 'alter table ['+ object_name(parent_obj) + '] drop constraint ['+name+']; '
from sysobjects
where xtype = 'F'
open c1
declare @c1 varchar(8000)
fetch next from c1 into @c1
while(@@fetch_status=0)
begin
exec(@c1)
fetch next from c1 into @c1
end
close c1
deallocate c1
go

--/第2步**********删除所有表*************************/

 use 数据库
declare @tname varchar(8000)
set @tname=''
select @tname=@tname + Name + ',' from sysobjects where xtype='U'
select @tname='drop table ' + left(@tname,len(@tname)-1)
exec(@tname)
go

删除所有的存储过程同理可得,但不需要走第一步,只需将第2步的代码的where xtype='U' 改成 where xtype='P',drop table 改成 drop Procedure

sysobjects的xtype代表含义:

在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行。

列名 数据类型 描述 
name sysname 对象名。 
Id int 对象标识号。 
xtype char(2) 对象类型。可以是下列对象类型中的一种: 
C = CHECK 约束 
D = 默认值或 DEFAULT 约束 
F = FOREIGN KEY 约束 
L = 日志 
FN = 标量函数 
IF = 内嵌表函数 
P = 存储过程 
PK = PRIMARY KEY 约束(类型是 K) 
RF = 复制筛选存储过程 
S = 系统表 
TF = 表函数 
TR = 触发器 
U = 用户表 
UQ = UNIQUE 约束(类型是 K) 
V = 视图 
X = 扩展存储过程

uid smallint 所有者对象的用户 ID。 
info smallint 保留。仅限内部使用。 
status int 保留。仅限内部使用。 
base_schema_ 
ver int 保留。仅限内部使用。 
replinfo int 保留。供复制使用。 
parent_obj int 父对象的对象标识号(例如,对于触发器或约束,该标识号为表 ID)。 
crdate datetime 对象的创建日期。 
ftcatid smallint 为全文索引注册的所有用户表的全文目录标识符,对于没有注册的所有用户表则为 0。 
schema_ver int 版本号,该版本号在每次表的架构更改时都增加。 
stats_schema_ 
ver int 保留。仅限内部使用。 
type char(2) 对象类型。可以是下列值之一: 
C = CHECK 约束 
D = 默认值或 DEFAULT 约束 
F = FOREIGN KEY 约束 
FN = 标量函数 
IF = 内嵌表函数 
K = PRIMARY KEY 或 UNIQUE 约束 
L = 日志 
P = 存储过程 
R = 规则 
RF = 复制筛选存储过程 
S = 系统表 
TF = 表函数 
TR = 触发器 
U = 用户表 
V = 视图 
X = 扩展存储过程

userstat smallint 保留。 
sysstat smallint 内部状态信息。 
indexdel smallint 保留。 
refdate datetime 留作以后使用。 
version int 留作以后使用。 
deltrig int 保留。 
instrig int 保留。 
updtrig int 保留。 
seltrig int 保留。 
category int 用于发布、约束和标识。 
cache smallint 保留。

SQL Server 删除数据库所有表和所有存储过程的更多相关文章

  1. 一次性删除数据库所有表和所有存储过程 SQL语句

    一次性删除数据库所有表和所有存储过程 SQL语句 今天转移数据库数据,需要把数据库原来的表和存储过程清空.删除所有的表:如果由于外键约束删除table失败,则先删除所有约束: --/第1步****** ...

  2. 小程序原理,生成SQL SERVER 2008 数据库所有表的结构文档

    作者:wide288 , 日期:2013-7-31 以前开发中,用 MYSQL 数据库,有个小程序 生成数据库结构文档.很方便,做为开发组的文档很有用. 现在开发中用到了 SQL SERVER 200 ...

  3. SQL Server判断数据库、表、存储过程、函数是否存在

    --判断数据库是否存在 if exists (select * from sys.databases where name = '数据库名') drop database [数据库名] --判断表是否 ...

  4. SQL Server 删除数据库

    1. 图形化界面删除 在所需要删除的数据库上右击,然后删除.注意如果这个数据库有应用或者用户连接,请勾选[关闭现有连接],否则无法删除. 2. DROP DATABASE删除数据库 drop data ...

  5. 数据库SQL server 删除一张表中的重复记录

    --建立一张表 create table cat( catId int, catName varchar(40) ) --将下边的插入语句,多执行几次. insert into catvalues(1 ...

  6. sql server判断数据库、表、列、视图是否存在

    1 判断数据库是否存在 if exists (select * from sys.databases where name = '数据库名') drop database [数据库名] 2 判断表是否 ...

  7. SQL Server —— 查询数据库、表、列等

    一.查询数据库(sys.databases —— select *from sys.databases where name='<数据库名>') select *from sys.data ...

  8. SQL SERVER查询数据库所有表的大小,按照记录数降序排列

    SELECT B.NAME,A.ROW_COUNT FROM SYS.DM_DB_PARTITION_STATS A,SYS.OBJECTS BWHERE A.OBJECT_ID=B.OBJECT_I ...

  9. Sql Server删除数据表中重复记录 三种方法

    本文介绍了Sql Server数据库中删除数据表中重复记录的方法. [项目]数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除![分析]1 ...

随机推荐

  1. php获取某年某月的天数

    function days_in_month($month, $year) { // calculate number of days in a month return $month == 2 ? ...

  2. angular学习笔记(七)-迭代2

    视图的迭代和它的ng-repeat属性绑定的数据是实时绑定的,一旦数据发生了改变,视图也会立即更新迭代. 还是刚才的那个例子,给它添加一个添加数据按钮和一个删除数据按钮. <!DOCTYPE h ...

  3. sudo apt-get update 时出现的hit、ign、get的含义

    hit,命中表示链接上这个网站 get获取表示有更新并且下载, ign忽略表示无更新或者更新无关紧要或者不需要,譬如某些插件系统已经有了或者语言翻译包

  4. solr中时区处理

    solr.in.sh中的最后 # By default the start script uses UTC; override the timezone if needed SOLR_TIMEZONE ...

  5. vue实现复制粘贴的两种形式

    方式一: 1.安装clipboard:npm install clipboard 2.src/utils/clipboard.js import Vue from 'vue' import Clipb ...

  6. 带limit的hivesql排序

    带limit的hivesql排序   select requestdomain,count(1) as cnt from ods_cndns_real_log where dt = 20160707 ...

  7. java 日期获取时间戳

    SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");            String dateS ...

  8. xml大项目,增删改查

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. Maven学习之(二)Maven插件创建项目

    现在这里是已经在eclipse上成功的安装了Maven的插件后的操作,简单的创建一个项目, 同时实现Maven功能. 前提条件: 1.JDK 2.maven安装好 3.eclipse上maven插件安 ...

  10. strerror() 和perror()函数

    在linux编程中,strerror()是个好东东,因为一个孤零零的errno看不出个所以然,然而strerror()返回的错误描述已经给我们解决问题提供了80%的成功率.但从安全性的角度来讲,str ...