我有一个SQL Server和Cache服务器,需要组合一些数据。大多数函数都在工作,除非我试图用变量或参数传递日期。
下面是我进行的一个测试(其中之一)。
declare @myDate datetime
set @myDate = convert(datetime,'2012-02-01',120)
select * from ccms..dbo.dcdnstat where timestamp > '2012-02-01' -- WORKS
exec( 'select * from dbo.dcdnstat where cdn = ?', 21004) at ccms -- WORKS
exec( 'select * from dbo.dcdnstat where timestamp > ?',@myDate) at ccms -- ERROR 7213
select * from ccms..dbo.dcdnstat where timestamp > @myDate -- ERROR 7322
Msg 7213,级别16,状态1,第9行提供程序尝试将远程存储过程参数传递到远程服务器"ccms"失败。验证参数的数量、顺序和传递的值是正确的。消息7322,级别16,状态2,第11行A向OLE DB访问接口提供参数信息时出错链接服务器"ccms"的"MSDASQL"。
我尝试了不同的日期格式,如上所示,我可以用变量查询其他字段,如果我使用特定的值,我可以查询日期。
不要使用存储过程参数的"DATETIME"类型,只需使用"DATE"
(只要您不需要时间要求)
我今天遇到了类似的问题。这与调用服务器和链接服务器不是同一版本有关。一个是SQLServer2005,另一个是SQLServer 2008。出现此问题的原因是,在远程端(2008)查询的列是datetime2,而调用服务器(2005)不支持datetime2。
我知道这有点晚了,但我偶然发现它在寻找与Cache系统类似的东西。看起来我们在同一个后端系统上工作。我的是Avaya CCMS系统。以下是我将日期作为变量传递的方法:
DECLARE @myDate DATETIME
SET @myDate = CAST('2012-07-01' AS DATETIME)
SELECT SUM(CallsOffered), SUM(CallsAnswered), SUM(SkillsetAbandonedAftThreshold)
FROM AvayaCCMS..dbo.mSkillsetStat
WHERE Timestamp = @myDate
我使用Sybase数据库作为链接服务器进行了类似的操作。正如MobileMon所说,我可以将日期时间更改为日期,现在效果很好。
declare @myDate date
set @myDate = convert(datetime,'2012-02-01',120)