如果您超過4GB的SQL Server 2005 Express版本上還原備份時,您將收到此錯誤:
CREATE DATABASE或ALTER DATABASE失敗,因爲 產生的累積數據庫大小會超過您的許可 限制每個數據庫4096 MB。
如果你有在SQL Server 2005 Express Edition的現有數據庫和suddendly增長超過4GB,你會得到這樣的錯誤:
無法爲數據庫「YourDatabaseName」分配一個新的頁面,因爲磁盤空間不足在文件組'YourFilegroup'中。通過刪除文件組中的對象,將其他文件添加到文件組或爲文件組中的現有文件設置自動增長來創建必要的空間。
所以答案是否定的。數據庫大小限制參數在sqlservr.exe中定義。 除非您可以重新編譯原始代碼,否則您無法通過TSQL獲取它。
通過@Kevin羅斯和@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 2015-R2上。
如果這樣的事情確實存在,這將是驚人的 - 這將是無論是在產品的更高版本一個毫無意義的功能,或將是一個額外的功能,他們不得不添加到Express,只有很少的價值。我會a)切換到EngineEdition屬性,這樣您就可以擺脫字符串比較,並且b)要麼施加4GB的嚴格限制(您如何使用這些信息?),要麼編寫足夠的代碼以便今天區分pre-SQL2008 R2和SQL2008 R2或更高版本,以及您今天所知的限制。 – 2011-02-16 15:42:28
@Damien_The_Unbeliever - 雖然它沒有使用更先進的版本,我們的應用程序需要用戶自己安裝的本地數據庫(在SQL Server Express的,因爲它是免費的!)。這是一個很好的功能,可以讓他們指出他們的空間不足。 – pete757 2011-02-16 16:37:11