发表于2015-02-02 21:58:40
有时我们要删除数据库中指定表的时候,却发现错综复杂的外键让我们无从下手。或者要一次删除大量表,不得一次一次重复进行大量手工操作。
不过下面,这些问题都不再是问题,只要你有了这个脚本。
你可以指定某个表,也可以指定以某个前缀或者后缀的所有表,甚至就是所有表。
我们先来看一下代码:
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)原创