【发布时间】:2014-07-25 14:53:48
【问题描述】:
[使用 SQL Server 2008 R2 Enterprise x64 SP1]
我正在尝试使用某种形式的 GETDATE() 将今天的日期传递给 OPENQUERY() 内的存储过程,但我不断收到错误
消息 8114,级别 16,状态 1,过程 spCalcProjection,第 0 行
将数据类型 nvarchar 转换为 datetime 时出错
这是代码(spCalcProjection 采用datetime):
SELECT top 1 multi FROM OPENQUERY([production], 'exec proddb.dbo.spCalcProjection "GETDATE()"')
如果我使用2014-05-22 或任何文字代替GETDATE(),那么我没有问题并得到正确的预期结果。如果我使用CAST(GETDATE() AS DATE) 或CONVERT(varchar, GETDATE(), 112) 之类的其他功能,则会再次出现上述错误。
【问题讨论】:
-
你为什么在
GETDATE()中使用双引号?,不用它们试试 -
@Lamak 我使用双引号是因为它们是必需的,否则会产生语法错误。这些或双单引号是转义 t-sql 所必需的。
-
使用两个单引号与双引号完全不同。您使用的是哪一个,它们完全不等效
-
@Lamak 我都试过了。
-
正如我所说,您应该尝试不使用它们。听着,使用双引号是语法错误,不起作用。并且也不需要用于“转义”字符串连接的 2 个单引号,这可能是您的错误的根源,因为它试图将
GETDATE()连接起来,就好像它是一个字符串一样
标签: sql tsql datetime stored-procedures openquery