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)原创