【问题标题】:Passing variables in OPENQUERY在 OPENQUERY 中传递变量
【发布时间】:2020-12-15 18:24:36
【问题描述】:

我毫不怀疑我错过了一些细节,但我不确定它是什么。这是查询:

DECLARE @START DATE, @END DATE, @MySQL VARCHAR(MAX)

SELECT @START = '12/1/2020'
SELECT @END = '12/10/2020'

SET @MySQL =
'SELECT * FROM OPENQUERY ([SERVERNAME], ''SELECT * FROM TABLE (NOLOCK) WHERE InitiatedDate BETWEEN ' + @Start + ' AND ' + @End + ')'
EXEC (@MySQL)

我收到此错误:

数据类型 varchar 和 date 在 add 运算符中不兼容

我用类似的查询测试了这种连接方法,它工作正常,没问题:

SET @MySQL =
'SELECT * FROM OPENQUERY ([SERVER], ''SELECT top ' + @X + '  * FROM TABLE'')'
EXEC (@MySQL)

【问题讨论】:

    标签: concatenation sql-server-2014 openquery


    【解决方案1】:

    您的第二个示例可能有效,因为 @X 是 VARCHAR 数据类型。

    在您的主要示例中,@START 和 @END 被定义为 DATE 数据类型,因此从逻辑上讲,您不能将它们附加到 VARCHAR 数据类型,就像添加 6 和“六”不会导致任何一个 12或'6six'。

    您需要使用 CONVERT 函数将 DATE 更改回 DATE 的字符串表示形式。小心使用 format 选项来获取格式的字符串,然后在查询运行时自动转换回 DATE。

    'SELECT * FROM OPENQUERY ([SERVERNAME], ''SELECT * FROM TABLE (NOLOCK) WHERE InitiatedDate BETWEEN ''' + CONVERT(varchar(10), @Start, 101) + ''' AND ''' + CONVERT(varchar(10), @End, 101) + ''')'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 2020-08-10
      • 2013-12-25
      相关资源
      最近更新 更多