在sql server中清空了数据记录但是对应的数据库文件的大小没有变小

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在sql server中清空了数据记录但是对应的数据库文件的大小没有变小相关的知识,希望对你有一定的参考价值。

我在sql server中创建了一个数据库,主要数据库文件最大设为3M,别两个次要数据库文件初始值为1M,最大设为10M。我往数据库中加入数据使主要数据库文件达到3M,次要数据库文件都达到10M了。然后我将数据库的记录都删了,再看回主要数据库文件和次要数据库文件的大小,发现主要数据库文件达到3M,次要数据库文件都还是10M。删除了记录为什么数据库文件没有缩小呢?

数据文件不会自动收缩的,你如果想把数据文件变小,就需要使用收缩功能。
收缩的过程可以参照下面的地址做,图形话界面的,楼主应该做的来
http://wenku.baidu.com/view/3254e967caaedd3383c4d3dd.html追问

你好,谢谢你!
你给的这个只是收缩日志的,那么收缩数据库文件的呢?

追答

数据文件和日志的操作是一样的

参考技术A 打开sqlserver2008,找到你的数据库,右键-》任务-》收缩-》选择收缩数据库,不要选择收缩文件。然后执行完就可以了。会把空间还给操作系统的本回答被提问者采纳 参考技术B 数据库(sqlserver和access是这样的,其他的不详)的大小只会变大,不会变小。文件大小开辟出来以后供数据放进去,删掉以后还会保留这部分空间以便下次放数据。追问

那如果变得很大很大后,硬盘岂不是爆满了?那怎么办啊?

参考技术C 数据库中的表数据占据的数据量很小,主要是LOG文件占用很大的数据库大小,可用清除LOG 参考技术D 学习中,刚好遇到这个问题

SQL Server 如何清空数据库所有表数据

1、清空SQL Server数据库中所有表数据

(1)编写存储过程脚本:

CREATE PROCEDURE sp_DeleteAllData
AS
EXEC sp_MSForEachTable ‘ALTER TABLE ? NOCHECK CONSTRAINT ALL‘
EXEC sp_MSForEachTable ‘ALTER TABLE ? DISABLE TRIGGER ALL‘
EXEC sp_MSForEachTable ‘DELETE FROM ?‘
EXEC sp_MSForEachTable ‘ALTER TABLE ? CHECK CONSTRAINT ALL‘
EXEC sp_MSForEachTable ‘ALTER TABLE ? ENABLE TRIGGER ALL‘
EXEC sp_MSFOREACHTABLE ‘SELECT * FROM ?‘
GO

说明:

存储过程sp_MSForEachTable :循环检查所有的表(微软官方文档)。

脚本创建了一个命名为sp_DeleteAllData的存储过程,前面两行语句分别禁用约束和触发器,第三条语句才是真正地删除所有数据,接下里的语句分别还原约束和触发器,最后一条语句是显示每个表中的记录,确认是否清空了所有的表数据。

(2)查询出数据库所有表,使用truncate语句逐个删除表数据:

首先使用select语句查询出数据库中所有表名

SELECT name FROM SysObjects Where XType=‘U‘ ORDER BY Name

查询到默认当前数据库下面的所有表名,如果需要查询其它数据库下的表,加上Where 条件 name = [dbname]

然后使用truncate或delete语句逐个删除表数据

truncate table order_buyer;

truncate table order_seller;

truncate table receivelist;

...















本文出自 “sharemi” 博客,请务必保留此出处http://sharemi.blog.51cto.com/11703359/1790643

以上是关于在sql server中清空了数据记录但是对应的数据库文件的大小没有变小的主要内容,如果未能解决你的问题,请参考以下文章

如何删除大量数据 sql server2005 数据量在8千万左右??

sql server 2008怎么清空日志

SQL Server 2005删除日志文件的几种方法小结

SQL SERVER数据库日志清空图文教程

sql server中如何查找一天内固定时间段内某个字段对应的记录条数?

从C#中的数据中删除特殊字符后如何将dbf文件中的数百万行数据上传到SQL Server