SQL Server 2005/2008 Express版每个数据库的限制为4 GB.据我所知,数据库引擎仅考虑数据,因此不包括日志文件,未使用的空间和索引大小.
获取MDF文件的长度不应在SQL Server限制方面提供正确的数据库大小.我的问题是如何获得数据库大小?
Amy*_*y B 100
注释sp_spaceused
dev*_*vio 16
根据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
Run Code Online (Sandbox Code Playgroud)
最好的解决方案是使用sys.sysfiles视图计算每个数据库文件的大小,考虑每个页面的大小为8 KB,如下所示:
USE [myDatabase]
GO
SELECT
[size] * 8
, [filename]
FROM sysfiles
Run Code Online (Sandbox Code Playgroud)
[field]列表示文件的大小,以页为单位(MSDN参考sysfiles).
您会看到至少会有两个文件(MDF和LDF):这些文件的总和将为您提供整个数据库的正确大小...
小智 5
我一直喜欢直接追求:
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 )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
113884 次 |
| 最近记录: |