0

我开发了一个使用实体框架连接到 Sql Server 2008(不是 R2)数据库的 Asp.net 应用程序。
客户端针对 Sql server 2008 R2数据库运行 db 脚本并成功执行。
执行应用程序时会引发异常:
“Sysutcdatetime”未被识别为内置函数。
检查堆栈跟踪后,似乎在执行 LINQ to Entity 框架语句时引发了异常。声明是这样的:

var item = Entities.News.FirstOrDefault(n => n.ExpirationDate > DateTime.UtcNow);

据我了解,从 Entity 框架生成的 sql 语句使用函数 Sysutcdatetime 来获取当前的 UTC 日期和时间。
我知道其中一种解决方案是将日期存储在变量中,而不是将其传递给 lambda 表达式,这样 UTC 日期和时间将在应用程序级别确定并在生成的 sql 语句中进行硬编码。

var currentUtcDate = DateTime.UtcNow;
var item = Entities.News.FirstOrDefault(n => n.ExpirationDate > currentUtcDate);

但我很好奇为什么 Sysutcdatetime 函数存在于 Sql server 2008 中而不存在于 Sql server 2008 R2 中?

4

2 回答 2

2
select Sysutcdatetime()
select @@VERSION

刚刚在我的 SQL Server 上运行它并得到这些结果

2010-07-14 19:36:40.5738642

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86) Apr 2 2010 15:53:02 版权所有 (c) Microsoft Corporation Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)

据我所知,SQL Server 2008 R2 上仍然存在 Sysutcdatetime

于 2010-07-14T19:39:09.660 回答
0

想法:

  • 什么是数据库兼容级别?
  • 你 100% 是 SQL Server 2008 R2 还是 SQL Server 2008?
于 2010-07-14T19:50:32.210 回答