SQL Server 2005/2008 Express版每个数据库的限制为4 GB.据我所知,数据库引擎仅考虑数据,因此不包括日志文件,未使用的空间和索引大小.
获取MDF文件的长度不应在SQL Server限制方面提供正确的数据库大小.我的问题是如何获得数据库大小?
注释sp_spaceused
的sp_helpdb
与sp_spaceused不同,不需要循环.
根据SQL2000帮助,sp_spaceused包括数据和索引.
这个脚本应该做:
CREATE TABLE #t (name SYSNAME, rows CHAR(11), reserved VARCHAR(18), data VARCHAR(18), index_size VARCHAR(18), unused VARCHAR(18)) EXEC sp_msforeachtable 'INSERT INTO #t EXEC sp_spaceused ''?''' -- SELECT * FROM #t ORDER BY name -- SELECT name, CONVERT(INT, SUBSTRING(data, 1, LEN(data)-3)) FROM #t ORDER BY name SELECT SUM(CONVERT(INT, SUBSTRING(data, 1, LEN(data)-3))) FROM #t DROP TABLE #t
在SQL Management Studio中,右键单击数据库,然后从上下文菜单中选择"属性".看看"尺寸"图.
最好的解决方案是使用sys.sysfiles视图计算每个数据库文件的大小,考虑每个页面的大小为8 KB,如下所示:
USE [myDatabase] GO SELECT [size] * 8 , [filename] FROM sysfiles
[field]列表示文件的大小,以页为单位(MSDN参考sysfiles).
您会看到至少会有两个文件(MDF和LDF):这些文件的总和将为您提供整个数据库的正确大小...
我一直喜欢直接追求:
SELECT DB_NAME( dbid ) AS DatabaseName, CAST( ( SUM( size ) * 8 ) / ( 1024.0 * 1024.0 ) AS decimal( 10, 2 ) ) AS DbSizeGb FROM sys.sysaltfiles GROUP BY DB_NAME( dbid )