0

SQL Server CE 3.5
SQL Server 2008

DataLenSumQuery:

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

在 SQL Server CE 上,Data列的类型是IMAGE

在 SQL Server Standard 上,类型Datavarbinary(MAX),因为 Microsoft 表示标准版的 IMAGE 类型已弃用并将被删除。

此代码适用于标准版:

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

但在 CE 上抛出异常:

System.InvalidOperationException:从具体化的“System.Int32”类型到可为空的“System.Int64”类型的指定转换无效。

反之亦然,这适用于 CE:

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

但在标准上抛出异常:

从具体化的“System.Int64”类型到可为空的“System.Int32”类型的指定转换无效。

如果Data两个提供者上的列都是 IMAGE 并且使用<int?>了 for,ExecuteStoreQuery则工作正常。

Microsoft 建议在 Standard 上迁移到 varbinary(MAX),但 Compact 版本甚至不支持它。

4

1 回答 1

0

选择 CAST(SUM(DATALENGTH(Data)) AS BIGINT)

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