[英]SqlException when upgrading linq2sql app from SQL Server 2005 to 2008
I'm upgrading a web app from SQL Server 2005 to 2008. 我正在将Web应用程序从SQL Server 2005升级到2008。
For a query like: 对于像这样的查询:
(from e in context.Orders
group e by e.OrderDate.Value.Date.AddDays(-e.OrderDate.Value.Date.Day + 1) into g
orderby g.Count() descending
select new
{
Value = g.Count(),
Date = g.Key
}).FirstOrDefault().Dump();
I'm now getting "SqlException: The datepart millisecond is not supported by date function dateadd for data type date." 我现在得到“ SqlException:日期函数dateadd不支持数据类型为date的datepart毫秒”。
The page: http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/6b00d5a4-8b43-402a-bcf7-b8516b6ffdf5/ 页面: http : //social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/6b00d5a4-8b43-402a-bcf7-b8516b6ffdf5/
...describes the problem further but has no solution. ...进一步描述问题,但没有解决方案。
With 2005 provider linq2sql produces: 使用2005提供程序linq2sql可以产生:
-- Region Parameters
DECLARE @p0 Int SET @p0 = 1
-- EndRegion
SELECT TOP (1) [t2].[value2] AS [Value], [t2].[value3] AS [Date]
FROM (
SELECT COUNT(*) AS [value], COUNT(*) AS [value2], [t1].[value] AS [value3]
FROM (
SELECT DATEADD(ms, (CONVERT(BigInt,(CONVERT(Float,(-DATEPART(Day, DATEADD(HOUR, -DATEPART(HOUR, [t0].[OrderDate]), DATEADD(MINUTE, -DATEPART(MINUTE, [t0].
[OrderDate]), DATEADD(SECOND, -DATEPART(SECOND, [t0].[OrderDate]), DATEADD(MILLISECOND, -DATEPART(MILLISECOND, [t0].[OrderDate]), [t0].[OrderDate])))))) + @p0)) *
86400000)) % 86400000, DATEADD(day, (CONVERT(BigInt,(CONVERT(Float,(-DATEPART(Day, DATEADD(HOUR, -DATEPART(HOUR, [t0].[OrderDate]), DATEADD(MINUTE, -DATEPART
(MINUTE, [t0].[OrderDate]), DATEADD(SECOND, -DATEPART(SECOND, [t0].[OrderDate]), DATEADD(MILLISECOND, -DATEPART(MILLISECOND, [t0].[OrderDate]), [t0].
[OrderDate])))))) + @p0)) * 86400000)) / 86400000, DATEADD(HOUR, -DATEPART(HOUR, [t0].[OrderDate]), DATEADD(MINUTE, -DATEPART(MINUTE, [t0].[OrderDate]), DATEADD
(SECOND, -DATEPART(SECOND, [t0].[OrderDate]), DATEADD(MILLISECOND, -DATEPART(MILLISECOND, [t0].[OrderDate]), [t0].[OrderDate])))))) AS [value]
FROM [Orders] AS [t0]
) AS [t1]
GROUP BY [t1].[value]
) AS [t2]
ORDER BY [t2].[value] DESC
And on 2008: 而在2008年:
-- Region Parameters
DECLARE @p0 Int = 1
-- EndRegion
SELECT TOP (1) [t2].[value2] AS [Value], [t2].[value3] AS [Date]
FROM (
SELECT COUNT(*) AS [value], COUNT(*) AS [value2], [t1].[value] AS [value3]
FROM (
SELECT DATEADD(ms, (CONVERT(BigInt,(CONVERT(Float,(-DATEPART(Day, CONVERT(DATE, [t0].[OrderDate]))) + @p0)) * 86400000)) % 86400000, DATEADD(day, (CONVERT
(BigInt,(CONVERT(Float,(-DATEPART(Day, CONVERT(DATE, [t0].[OrderDate]))) + @p0)) * 86400000)) / 86400000, CONVERT(DATE, [t0].[OrderDate]))) AS [value]
FROM [Orders] AS [t0]
) AS [t1]
GROUP BY [t1].[value]
) AS [t2]
ORDER BY [t2].[value] DESC
I found one workaround: 我找到了一种解决方法:
(from e in context.Orders
group e by new DateTime(e.OrderDate.Value.Year, e.OrderDate.Value.Month, 1) into g
orderby g.Count() descending
select new
{
Value = g.Count(),
Date = g.Key
}).FirstOrDefault();
But still interested in learning more about this problem. 但是仍然有兴趣了解有关此问题的更多信息。
I tried to change compatability more to Mysql Server 2008 but that didn't help the original query. 我试图将兼容性更多地更改为Mysql Server 2008,但这对原始查询没有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.