Sql server 2008 关键字';当前时间戳';-但只有一个数据库

Sql server 2008 关键字';当前时间戳';-但只有一个数据库,sql-server-2008,Sql Server 2008,我有一个SQL Server 2008 R2实例,上面有几个数据库 我试图在其中一个数据库(我们称之为DB1)上运行一个表值函数,它将日期作为输入并返回一个相关信息的表 我按如下方式运行查询: SELECT * FROM dbo.getAllStatusesForGridProjectsByMaximumDate(CURRENT_TIMESTAMP) 以获取最新的信息。但是,SQL没有显示结果表,而是显示错误: Msg 156, Level 15, State 1, Line 1 Incor

我有一个SQL Server 2008 R2实例,上面有几个数据库

我试图在其中一个数据库(我们称之为DB1)上运行一个表值函数,它将日期作为输入并返回一个相关信息的表

我按如下方式运行查询:

SELECT * FROM dbo.getAllStatusesForGridProjectsByMaximumDate(CURRENT_TIMESTAMP) 
以获取最新的信息。但是,SQL没有显示结果表,而是显示错误:

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'CURRENT_TIMESTAMP'.
但奇怪的是,如果我跳到另一个数据库(DB2)并在具体引用服务器时运行该函数,它会运行:

USE DB2
GO

SELECT * FROM DB1.dbo.getAllStatusesForGridProjectsByMaximumDate(CURRENT_TIMESTAMP) 
返回结果。但是,如果我尝试在DB1之外运行查询,它会返回同样的错误语法错误:

USE DB1
GO

SELECT * FROM DB1.dbo.getAllStatusesForGridProjectsByMaximumDate(CURRENT_TIMESTAMP) 

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'CURRENT_TIMESTAMP'.
我已经查看了数据库,看看是否有某种设置或属性我遗漏了,允许我将当前的_时间戳传递给表值函数,但没有找到任何内容。我已经尝试了当前时间戳的显式强制转换/转换,但它不喜欢其中的任何函数


在我的DB2上执行了什么巫术,允许它运行DB1上未执行的dbo.Function(当前的_时间戳)?我将自己继续检查,但是非常感谢您这些优秀的人能够提供的任何帮助。

检查数据库的兼容性级别(不清楚问题是发生在DB1中还是在DB1中调用函数时)

我敢打赌,在任何出现问题的数据库中,兼容性级别都是80;SQL Server 2000不允许以这种方式将函数直接传递给UDF(如果compat级别为80,则调用某些动态管理函数也会遇到同样的问题-请参阅)。此数据库在从2000备份或分离后必须已还原或连接。或者从2000年升级后。您可以通过以下方式检查当前兼容性:

SELECT name, compatibility_level FROM sys.databases WHERE name = 'DB1';
如果您发现它小于100,您可以说:

ALTER DATABASE DB1 SET COMPATIBILITY_LEVEL = 100;
但是,只有当您知道由于其他原因不需要较低的兼容性时,才应该这样做,并且您应该在测试系统上验证数据库在新的兼容性级别下是否按预期工作。如果你有问题,你可以随时把它改回来,但最好做好准备

如果不想弄乱兼容性级别,可以稍微更改逻辑

DECLARE @now DATETIME = CURRENT_TIMESTAMP;
SELECT * FROM dbo.getAllStatusesForGridProjectsByMaximumDate(@now);

所以UH我们现在能成为最好的朋友吗?当然。或者,当你看到其他人在同一问题上苦苦挣扎时,就提前付款。:-)不过,说真的,我有点被抛进了DBA的角色(小公司,你们都听说过这个故事),所以当其他事情发生时,我必须学习所有这些东西。兼容性级别正是我所需要的,因为DB1是80,DB2是90。我将更深入地研究兼容性级别,以便了解我刚才所做的工作,非常非常感谢您的投入。