您的位置:首页 > 数据库

一条SQL删除所有用户自定义数据表,存储过程(转)

2010-01-11 15:12 537 查看
有一天,本人在想把数据库重新清理一次,结果郁闷的是没有删除数据库的权限,就更别说新建了。愁。与是我要写一条SQL删除所有用户自定义数据表,存储过程。 执行下面的查询语句,可以得到所有包含在sys.sysobjects视图里的数据USE AdventureWorksSELECT *FROM sys.sysobjectsGO得出数据后,请注意名为type的列——这一列标明了对象的类型,也就是前面提到的24种。在这里,我用一个表格把它们列出来:AF = Aggregate function (CLR) C = CHECK constraint D = DEFAULT (constraint or stand-alone) F = FOREIGN KEY constraint FN = SQL scalar function FS = Assembly (CLR) scalar function FT = Assembly (CLR) table-valued function IF = SQL inline table-valued function IT = Internal table P = SQL stored procedure PC = Assembly (CLR) stored procedure PK = PRIMARY KEY constraint R = Rule (old-style, stand-alone) RF = Replication-filter-procedure S = System base table SN = Synonym SQ = Service queue TA = Assembly (CLR) DML trigger TF = SQL table-valued-function TR = SQL DML trigger U = Table (user-defined) UQ = UNIQUE constraint V = View X = Extended stored procedure
OK,我们要得到名称的表(用户自定义表)就是类型为“U”的对象;而sys.objects的类型为“S”。所以,为了达到我们的最终目的,SQL语句应该是——USE AdventureWorksSELECT nameFROM sys.sysobjectsWHERE type='U'GO
删除表:
--20081008 技术不高,但想出名 NAME:KYE
DECLARE @Tb_Name varchar(30) --定义游标操作 DECLARE staff_cursor CURSOR FOR SELECT [name] FROM sys.sysobjects WHERE type='U' -- 打开游标 OPEN staff_cursor -- 提取记录数据 FETCH Next FROM staff_cursor Into @Tb_Name WHILE @@fetch_status = 0 BEGIN EXEC('DROP TABLE ' + @Tb_Name ) PRINT @Tb_Name FETCH Next FROM staff_cursor Into @Tb_Name END CLOSE staff_cursor -- 关闭游标 DEALLOCATE staff_cursor -- 释放游标资源删除存储过程:

--20081008 技术不高,但想出名 NAME:KYE
DECLARE @Sp_Name varchar(30) --定义游标操作 DECLARE @Tb_Count int SET @Tb_Count = 0 DECLARE staff_cursor CURSOR FOR SELECT [name] FROM sys.sysobjects WHERE type='p' AND Category =0 --Category =0 表示 -- 打开游标 OPEN staff_cursor -- 提取记录数据 FETCH Next FROM staff_cursor Into @Sp_Name PRINT '开始删除存储过程' WHILE @@fetch_status = 0 BEGIN SET @Tb_Count = @Tb_Count + 1 EXEC('DROP PROCEDURE ' + @Sp_Name ) PRINT CONVERT(varchar(20),@Tb_Count) + ': ' + @Sp_Name FETCH Next FROM staff_cursor Into @Sp_Name END print '总共删除' + CONVERT(varchar(20),@Tb_Count) + '个存储过程' CLOSE staff_cursor -- 关闭游标 DEALLOCATE staff_cursor -- 释放游标资源以此类推吧。呵呵。也可删除函数什么的。呵呵。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gedeng_2000/archive/2008/10/08/3031125.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: