【问题标题】:Adding a parameter to a pass through query向传递查询添加参数
【发布时间】:2016-02-21 21:13:45
【问题描述】:

我正在尝试在传递查询中使用参数问题是当我设置语句时我得到

“+”附近的语法不正确。期待')'

我以前做过这个,所以我不确定我现在做错了什么。我已经缩短了下面的查询以给出要点。

DECLARE @WORK_DATE AS VARCHAR(20)

SET @WORK_DATE = '20160210'

SELECT * FROM OPENQUERY(DATA_BASE_1,
  'SELECT EMPLOYEE.EMPLOYEE_NUMBER AS EMPLOYEE_ID
  FROM TABLE_1 EMPLOYEE
  LEFT JOIN TABLE_2 PERSON
  ON EMPLOYEE.EMPLOYEE_NUMBER = PERSON.EMPLOYEE_NUMBER
  AND PERSON.WORK_DATE = '''''+ @WORK_DATE + '''''')

【问题讨论】:

  • 您不能在OPENQUERY 中使用变量。尝试使用动态 SQL。例如DECLARE @WORK_DATE AS VARCHAR(20) SET @WORK_DATE = '2002-11-21 00:00:00' DECLARE @SQL NVARCHAR(MAX) = 'SELECT * FROM OPENQUERY(Database1, ''SELECT EMPLOYEE.EMPLOYEE_NUMBER AS EMPLOYEE_ID FROM TABLE_1 EMPLOYEE LEFT JOIN TABLE_2 PERSON ON EMPLOYEE.EMPLOYEE_NUMBER = PERSON.EMPLOYEE_NUMBER AND PERSON.WORK_DATE =''''' + @WORK_DATE + ''''''')' EXEC(@SQL)

标签: sql-server openquery


【解决方案1】:

来自Transact-SQL OPENQUERY documentation

备注

OPENQUERY 的参数不接受变量。

执行此操作的一种方法是将变量传递给存储要执行的查询的字符串,然后执行它。

DECLARE @SQL_TO_EXEC NVARCHAR(MAX), @WORK_DATE VARCHAR(20)

SET @WORK_DATE = '20160210'
SET @SQL_TO_EXEC = 'SELECT * FROM OPENQUERY(DATA_BASE_1, ''SELECT EMPLOYEE.EMPLOYEE_NUMBER AS EMPLOYEE_ID FROM TABLE_1 EMPLOYEE LEFT JOIN TABLE_2 PERSON ON EMPLOYEE.EMPLOYEE_NUMBER = PERSON.EMPLOYEE_NUMBER AND PERSON.WORK_DATE = '''''+ @WORK_DATE + ''''''')'

EXEC (@SQL_TO_EXEC)

【讨论】:

  • 这很好用,我用谷歌搜索了很多关于通过变量的传递,所以谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 2015-04-22
  • 2016-01-19
  • 1970-01-01
相关资源
最近更新 更多