テストでは、次のことがわかりました。
sp_spaceused
期待どおりに動作しません。多くのレコードを削除した後、12GB が表示されました。query sys.databases に関する他の回答は、私には十分に明確ではありませんでした。
周りを検索すると、 Ramons Weblogで SQL Server 2012 Express Edition 10GB Size Limit に関する非常に良い説明が見つかりました[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 と組み合わせると、DB へのリクエストは次のようになります
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;