类似这样:
获取所有表名 ,根据表名来删除表
--变量@tablename保存表名
declare @tablename nvarchar(100)
--将用户表全部保存到临时表#tablename中
SELECT [name] into #tablename FROM sysobjects
WHERE type = 'U';
--当#tablename有数据时
while(select count(1) from #tablename)>0
begin
--从#tablename中取第一条
select top 1 @tablename=[name] from #tablename;
--进行表删除 *** 作,表名为变量,所以此处用到动态sql
exec('drop table '+@tablename);
--将此表名记录从#tablename中删除
delete from #tablename where [name]=@tablename;
end
--最后删除临时表#tablename
SQL都是自己管理空间,不用你去清理(数据量不大时,一般优化整理你可以不做),你是要想卸载吗,如是卸载,就先卸载软件,再删数据库文件,但数据库文件可以建在任何路径,如记不清楚就按下面方法查找文件:
(1)是MS SQL Server , 查找 mdf,ndf, ldf文件。
(2)是MySQL , 查找 frm,myd,myi文件。
他们一般在一个夹子里,看准了就删。
清除数据库日志语句
--清除sqlserver 2000/2005 数据库日志
替换下红字部分数据库名称
declare @databasename varchar(15)
select @databasename='hdjjgl_journal'
DUMP TRANSACTION @databasename WITH NO_LOG
BACKUP LOG @databasename WITH NO_LOG
DBCC SHRINKDATABASE(@databasename)
或者
USE 数据库名
DUMP TRANSACTION 数据库名 WITH NO_LOG
BACKUP LOG 数据库名 WITH NO_LOG
DBCC SHRINKFILE(2)
--清除sqlserver 2008 数据库日志 ,执行两遍
替换下红字部分数据库名称,建立datalogbak清楚的日志备份文件夹,注意路径自定义。
use gdzjg_journal
declare @databasename varchar(100)
declare @databasenamelog varchar(100)
declare @databasenamedir varchar(100)
select @databasename='gdzjg_journal'
select @databasenamelog=@databasename+'_log'
select @databasenamedir='g:\datalogbak\'+@databasename
BACKUP LOG @databasename to disk=@databasenamedir
DBCC SHRINKFILE (@databasenamelog,1)
或者
ALTER DATABASE 数据库名称SET RECOVERY SIMPLE
ALTER DATABASE 数据库名称SET RECOVERY FULL
DBCC SHRINKDATABASE(数据库名称,0)
sqlserver 2000、2008会保存所有的数据库 *** 作过程,将指令保存在ldf文件中,如果误删除数据,想恢复数据的话,可以通过Lumigent Log Explorer For SQLServer 软件分析ldf文件,可以看到所有执行过的insert、update、delete数据,导出来再逆向执行即可,本人曾经用过一回,确实奏效。
1、sql server 2000清理数据库日志
USE 数据库名
DUMP TRANSACTION 数据库名 WITH NO_LOG
BACKUP LOG 数据库名 WITH NO_LOG
DBCC SHRINKFILE(2)
SHRINKFILE(2),后面的2是file_id,可以在当前数据库用select from sysfiles看得到,看数据库的log文件的fileid是多少,正常情况下log的ldf文件是2,mdf文件的fileid是1。
这个查询语句可以随时执行,不影响数据库的运行。
sql server 2005、2008清理数据库日志
USE 数据库名
ALTER DATABASE 数据库名 SET RECOVERY SIMPLE
ALTER DATABASE 数据库名 SET RECOVERY FULL
DBCC SHRINKDATABASE(数据库名,0)
这个查询语句可以随时执行,不影响数据库的运行。
清理ldf的 *** 作可以使用sql server代理,每天自动执行一次,就不怕文件增长撑爆硬盘了。
2、一般mdf用不着收缩,收缩多了容易产生文件碎片,因为delete数据之后,mdf文件中可用页面空间会保留在那里,等下次有新数据进来时,会继续使用。如果实在要清理,可以参考下面的语句:
sql server 2000、2005、2008 收缩mdf文件
DBCC SHRINKDATABASE(数据库名)
DBCC SHRINKFILE(1,0)
DBCC UPDATEUSAGE(0)
执行上述 *** 作后,你会发现mdf的文件减少了,ldf的文件增大了,再用上面1的日志清理 *** 作一次即可。
3、最后再附送一个查看数据表的行数、占用文件空间、存储情况的查询语句
-- drop table #test
create table #test(
name varchar(50),
rows int,
reserved varchar(20),
data varchar(20),
index_size varchar(20),
unused varchar(20)
)
set nocount on
insert into #test
EXEC sp_MSforeachtable @command1="sp_spaceused ''"
select from #test order by cast(replace(reserved,'KB','') as int) desc
清空单表可以truncate
清空某个库下的所有表时,可以考虑导出这张表,以导出表结构的方式,把该库下所有的表结构导出来,再删库,导回去就好了
mysqldump
-d
参数是只导结构,不导数据的
很简单的东西。
首先,用存储过程封装你要处理的语句。
其次,用数据库作业来调度存储过程。
明白没有
什么玩意都要例子,这个玩意儿真没有。要是搞不明白,搞qq远程,让本人给讲解。
可以用这个语句
来删除数据库
drop
database
<数据库名>
也可以在企业管理器中
点开
数据库
找到你要删除的数据库右键
有个删除
假设A表是原来的表,B表是要转的表 如果你想转出后的数据完全是A表的数据,且B表结构和A表一样 你可以这样 select from A into B go drop Table A go 这个就顺利的把A表删除,并且数据全部到B表 如果只是转出一部分可以,并在A表中删除者部分数据 select from A into B where 你的条件 go delete from A where 条件要和上面的一样就可以了 go 3。如果你的B表是本来存在的,且里面已经有数据了 你只能 insert into B(Field1,Field2,) select Field1,Field2, from A where 条件(如果是全部A表数据可没有条件) go delete from A where 条件(如果是全部A表数据可没有条件) go 不知道楼主到底是什么意思,我的回答是否能给楼主点启发
以上就是关于如何用sql语句来清空一个数据库全部的内容,包括:如何用sql语句来清空一个数据库、sql数据库怎么清理、清理数据库碎片SQL语句等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)