如何用sql语句来清空一个数据库

如何用sql语句来清空一个数据库,第1张

类似这样:

获取所有表名 ,根据表名来删除表

--变量@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语句等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9368353.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存