Если вы восстанавливаете резервную копию размером более 4 ГБ в SQL Server 2005 Express Edition, вы получите эту ошибку:
Ошибка CREATE DATABASE или ALTER DATABASE, потому что результирующий совокупный размер базы данных превысит ваш лицензионный лимит в 4096МБ на базу данных.
В случае, если у вас есть существующая база данных в SQL Server 2005 Express Edition, и размер ее неожиданно превысит 4 ГБ, вы получите эту ошибку:
Не удалось выделить новую страницу для базы данных «YourDatabaseName», посколькунедостаточно места на диске в файловой группе 'YourFilegroup'.Создайте необходимое пространство, отбросив объекты в файловой группе, добавив дополнительные файлы в файловую группу или установив автоматический рост для существующих файлов в файловой группе.
Таким образом, ответ НЕТ.Параметр ограничения размера базы данных определен в 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.