0

SQL サーバー CE 3.5
SQL サーバー 2008

DataLenSumQuery:

SELECT SUM(DATALENGTH(Data)) FROM ...

SQL Server CE では、Data列のタイプはIMAGE

SQL Server Standard では、のタイプはDataですvarbinary(MAX)。Microsoft は、標準版の IMAGE タイプは非推奨であり、削除されると述べているためです。

このコードは、Standard エディションで正常に動作します。

using (var container = new DatabaseModelContainer())
{
var result = container.ExecuteStoreQuery<long?>(DataLenSumQuery).FirstOrDefault();
            long test= result.HasValue ? result.Value : 0L;
}

ただし、CE で例外をスローします。

System.InvalidOperationException: 具体化された 'System.Int32' 型から null 許容の 'System.Int64' 型への指定されたキャストは無効です。

逆に、これは CE で機能します。

using (var container = new DatabaseModelContainer())
{
var result = container.ExecuteStoreQuery<int?>(DataLenSumQuery).FirstOrDefault();
            long test= result.HasValue ? result.Value : 0L;
}

ただし、標準では例外がスローされます:

実体化された 'System.Int64' 型から null 許容の 'System.Int32' 型への指定されたキャストは無効です。

Data両方のプロバイダーの列が IMAGE で、<int?>forExecuteStoreQueryが使用されている場合は正常に動作します。

Microsoft は Standard で varbinary(MAX) に移行することを提案していますが、Compact エディションはそれをサポートしていません。

4

1 に答える 1

0

SELECT CAST(SUM(DATALENGTH(Data))AS BIGINT)FROM

container.ExecuteStoreQuery<long?>()
于 2012-11-27T08:53:30.380 に答える