我正在开发一个网站,该网站的数据库使用SQL Server 2008 R2 Express。在测试中,该数据库中存储了许多数据和图像。

According to wiki, the SQL Server Express edition has a 10 GB size limit.当我插入数据并达到限制时,将引发什么异常?或者,如何通过代码检测接近极限问题?

我将EF 5与代码优先方法结合使用,以插入大型数据集。

最佳答案

在测试中,我看到了:

sp_spaceused

无法正常运行,删除大量记录后显示为12GB。而且关于查询sys.databases的其他答案对我来说还不够清楚。

到处搜索我发现关于Ramons weblog上SQL Server 2012 Express Edition 10GB大小限制的很好解释[EDIT2018更新链接]
SELECT
  [name] AS [Filename],
  [size]/128.0 AS [Filesize],
  CAST(FILEPROPERTY([name],'SpaceUsed') AS int)/128.0 AS [UsedSpaceInMB],
  [size]/128.0 - CAST(FILEPROPERTY([name],'SpaceUsed') AS int)/128.0 AS [AvailableSpaceInMB],
  [physical_name] AS [Path]
FROM sys.database_files

“...空间包括事务日志,并且还包括这些文件中所有未使用的空间。...。当SQL Server Express无法为数据文件保留更多空间时,它将开始提示。”

所以检查
CAST(FILEPROPERTY([name],'SpaceUsed') AS int)/128.0 AS [UsedSpaceInMB]

似乎是最好的选择。

c#中的EF结合,我对数据库的请求看起来像
string sqlSelect = "SELECT CAST(FILEPROPERTY([name],'SpaceUsed') AS int)/128.0 AS [UsedSpaceInMB] FROM sys.database_files";
var dbResult = dbInstance.Database.SqlQuery<Decimal>(sqlSelect).FirstOrDefault();
double spaceUsedInGb = Convert.ToDouble(dbResult)/1024;

关于c# - 如何检查我的SQL Server Express数据库是否超过10 GB的大小限制?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19853166/

10-10 18:12
查看更多