SQL Server(MSSQL)批量删除外键及表的T-SQL脚本

作者:翅膀的初衷 来源:本站原创 发布时间:2015-02-02 查看数:7439

有时我们要删除数据库中指定表的时候,却发现错综复杂的外键让我们无从下手。或者要一次删除大量表,不得一次一次重复进行大量手工操作。

不过下面,这些问题都不再是问题,只要你有了这个脚本。

你可以指定某个表,也可以指定以某个前缀或者后缀的所有表,甚至就是所有表。

我们先来看一下代码:

DECLARE    @name varchar(200) 
SET @name='t_table_%'  --这里指定要进行操作的表,如果只删除一个表,则直接指定表名,如果指定前后缀,则使用匹配%符进行匹配,如果要删除全部的表,直接填%就可以

--下面为生成删除外键的T-SQL
DECLARE sql_cursor CURSOR 
FOR 
select 'alter table ['+ object_name(parent_obj) + '] drop constraint ['+name+']; ' from sysobjects where xtype = 'F' and object_name(parent_obj) like @name 

--使用游标 指定外键删除
OPEN sql_cursor 
DECLARE @sqlstr sysname 
FETCH NEXT FROM sql_cursor INTO @sqlstr 
WHILE (@@FETCH_STATUS <> -1) 
BEGIN 
exec (@sqlstr) 
FETCH NEXT FROM sql_cursor INTO @sqlstr 
END 
DEALLOCATE sql_cursor 

--执行表删除
DECLARE tables_cursor CURSOR 
FOR 
select [name] from sysobjects where xtype='u' and name like @name 
OPEN tables_cursor 
DECLARE @tablename sysname 
FETCH NEXT FROM tables_cursor INTO @tablename 
WHILE (@@FETCH_STATUS <> -1) 
BEGIN 
exec ('drop table '+@tablename) 
FETCH NEXT FROM tables_cursor INTO @tablename 
END 
DEALLOCATE tables_cursor

里面的有具体的注释,很好理解。注意一下@name这个参数,这是用来匹配表名的,支持匹配符。如果只删除一个表,则填表名就行。如果要删除全部的表,直接填%,其它规则可以自己配合通配符自由组合。

以上代码虽然很简单,但是实用性不小,我们用来清除某个数据部的所有或部分表时特别有效,特别是表存在大量外键关系时(我也正是在这种情况下才写了此段脚本)。

以上脚本为极念网(www.jiniannet.com)原创