SQL Server CE 3.5
SQL Server 2008
DataLenSumQuery:
SELECT SUM(DATALENGTH(Data)) FROM ...
在SQL Server CE上,Data
列的类型为IMAGE
在SQL Server Standard上,Data
的类型为varbinary(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;
}
但是在Standard上抛出异常:
从物化的'System.Int64'类型到a的指定强制转换 可以为空的'System.Int32'类型无效。
如果两个提供商的Data
列为IMAGE且<int?>
使用ExecuteStoreQuery
,则无效。
Microsoft建议在Standard上使用varbinary(MAX),但Compact版本甚至不支持它。
答案 0 :(得分:0)
SELECT CAST(SUM(DATALENGTH(Data))AS BIGINT)FROM
container.ExecuteStoreQuery<long?>()