如果您在 SQL Server 2005 Express Edition 上恢复大于 4GB 的备份,您将收到以下错误:
CREATE DATABASE 或 ALTER DATABASE 失败,因为
产生的累积数据库大小将超过您的许可
每个数据库的限制为 4096 MB。
如果您在 SQL Server 2005 Express Edition 中有一个现有的数据库并且突然增长到超过 4GB,您将收到此错误:
由于文件组“YourFilegroup”中的磁盘空间不足,无法为数据库“YourDatabaseName”分配新页面。通过删除文件组中的对象、向文件组中添加其他文件或为文件组中的现有文件设置自动增长来创建必要的空间。
所以答案是否定的。数据库大小限制参数在 sqlservr.exe 中定义。
除非您可以重新编译原始代码,否则您无法通过 TSQL 获得它。
受@Kevin Ross 和@Damien_The_Unbeliever 建议的启发:
SELECT
CASE
WHEN SERVERPROPERTY ('EngineEdition') = 4 -- 4 = Express Edition
THEN
CASE
WHEN (SELECT max_size FROM sys.database_files WHERE file_id =1)=-1
THEN
CASE
WHEN CONVERT(REAL,CONVERT(VARCHAR(5),SUBSTRING(CONVERT(VARCHAR(5),SERVERPROPERTY('productversion')), 1, CHARINDEX('.', CONVERT(VARCHAR(5),SERVERPROPERTY('productversion')))-1))) < 10.5 -- Not SQL Server R2
THEN
'You have got '
+ CONVERT(VARCHAR(38), (SELECT 4096-size/128 FROM sys.database_files WHERE file_id =1))
+' Mb '
+'('
+ CONVERT(VARCHAR(38), CONVERT(int, 100*CONVERT(float, (SELECT 4096 - size/128 FROM sys.database_files WHERE file_id =1))
/
4096))
+ '%) available.'
+ ' You may increase your database size up to 4Gb.'
ELSE -- You have got SQL Server R2
'You have got '
+ CONVERT(VARCHAR(38), (SELECT 10240-size/128 FROM sys.database_files WHERE file_id =1))
+' Mb'
+'('
+ CONVERT(VARCHAR(38), CONVERT(int, 100*CONVERT(float, (SELECT 10240 - size/128 FROM sys.database_files WHERE file_id =1))
/
10240))
+ '%) available.'
+ ' You may increase your database size up to 10Gb.'
END
ELSE
CASE
WHEN CONVERT(REAL,CONVERT(VARCHAR(5),SUBSTRING(CONVERT(VARCHAR(5),SERVERPROPERTY('productversion')), 1, CHARINDEX('.', CONVERT(VARCHAR(5),SERVERPROPERTY('productversion')))-1))) < 10.5 -- Not SQL Server R2
THEN
'You have got '
+ CONVERT(VARCHAR(38), (SELECT max_size - size FROM sys.database_files WHERE file_id =1)/128)
+' Mb left out of '
+' Mb ('
+ CONVERT(VARCHAR(38), CONVERT(int, 100*CONVERT(float, (SELECT max_size - size FROM sys.database_files WHERE file_id =1))
/
CONVERT(float,(SELECT max_size FROM sys.database_files WHERE file_id =1))))
+ '%).'
+ ' You may increase your database size up to 4Gb.'
ELSE -- You have got SQL Server R2
'You have got '
+ CONVERT(VARCHAR(38), (SELECT max_size - size FROM sys.database_files WHERE file_id =1)/128)
+' Mb left out of '
+ CONVERT(VARCHAR(38), (SELECT max_size FROM sys.database_files WHERE file_id =1)/128)
+' Mb ('
+ CONVERT(VARCHAR(38), CONVERT(int, 100*CONVERT(float, (SELECT max_size - size FROM sys.database_files WHERE file_id =1))
/
CONVERT(float,(SELECT max_size FROM sys.database_files WHERE file_id =1))))
+ '%).'
+ ' You may increase your database size up to 10Gb.'
END
END
ELSE -- Congratulations! You have got something better than Express Edition!
CASE
WHEN (SELECT max_size FROM sys.database_files WHERE file_id =1)=-1
THEN
'Main file will grow until the disk is full.'
ELSE
'You have got '
+ CONVERT(VARCHAR(38), (SELECT max_size - size FROM sys.database_files WHERE file_id =1)/128)
+' Mb left out of '
+ CONVERT(VARCHAR(38), (SELECT max_size FROM sys.database_files WHERE file_id =1)/128)
+' Mb ('
+ CONVERT(VARCHAR(38), CONVERT(int, 100*CONVERT(float, (SELECT max_size - size FROM sys.database_files WHERE file_id =1))
/
CONVERT(float,(SELECT max_size FROM sys.database_files WHERE file_id =1))))
+ '%)'
END
END
AS
Database_Info
显然我没有机会在 SQL Server 2005-2008-R2 上检查它。