您好,欢迎访问一九零五行业门户网

sql批量删除数据与批量删除数据库表语句

我们介绍了二种批量删除数据的方法(游标形式和sql存储过程),同时还介绍了批量删除数据库表的方法,有需要的同学可参考一下。
游标删除方法
 代码如下 复制代码
//定义游标
declare tables_cursor cursor
for
select name from sysobjects where type = 'u' //选择用户表名
open tables_cursor //打开游标连接
declare @tablename sysname // 定义变量
fetch next from tables_cursor into @tablename //结果集中一行一行读取表名
while (@@fetch_status -1) //判断游标状态
begin
exec ('trunecate table ' + @tablename) //清空表中的数据
fetch next from tables_cursor into @tablename //下一行数据
end
deallocate tables_cursor //关闭游标
/42850.htm target=_blank >sql存储过程实例地
 代码如下 复制代码
create procedure batch_delete
@tablename nvarchar(100), --表名
@fieldname nvarchar(100), --删除字段名
@delcharindexid nvarchar(1000)
as
declare @pointerprev int
declare @pointercurr int
declare @tid nvarchar(50), @sql nvarchar(1000)
set @pointerprev = 1
while (@pointerprev begin
set @pointercurr = charindex(',',@delcharindexid,@pointerprev)
if(@pointercurr>0)
begin
set @tid = cast(substring(@delcharindexid, @pointerprev, @pointercurr - @pointerprev) as nvarchar(50))
set @sql = 'delete from '+ @tablename +' where '+ @fieldname + ' = '''+ @tid+''''
exec(@sql)
print('======='+@tid+'=======sql'+@sql)
set @pointerprev = @pointercurr + 1
print(@pointerprev)
end
else
begin
print('break')
break
end
end
--删除最后一个,因为最后一个后面没有逗号,所以在循环中跳出,需另外再删除
set @tid = cast(substring(@delcharindexid, @pointerprev, len(@delcharindexid) - @pointerprev + 1) as nvarchar(50))
set @sql = 'delete from '+ @tablename +' where '+ @fieldname + ' = '''+ @tid+''''
exec(@sql)
print('======='+@tid+'=======sql'+@sql)
go
网上找的批量删除表方法
 代码如下 复制代码
  /*--------------------------------
功能说明:  批量droptable
使用说明:  使用时一定要小心,因为删选表的where条件是like所有必须保证where
后的like确定与你要删除表名相匹配
---------------------------------*/
--------参数定义-------------------
declare @tablename as nvarchar(50) --查询表名条件(小心!,确保like条件是你要drop的表.tablename尽量精确)
set @tablename='test' 
--------------------------------------
--select name from sys.tables   where name like '%'+@tablename+'%' --查询出要删除表的名称
if @tablename='' set @tablename='tablename'--初始化tablename为tablename,防止@tablename为空
declare @tablenames as nvarchar(3000)
declare @sql as nvarchar(3000)
set @tablenames=
(select ','+name from sys.tables   where name like '%'+@tablename+'%'  for xml path(''))
set @tablenames= stuff(@tablenames,1,1,'')
set @sql='drop table '+@tablenames
exec(@sql)
其它类似信息

推荐信息