0

I am trying to use parameters within a pass through query the issue is when I set the statement up I get

Incorrect syntax near '+'. Expecting ')'

I've done this before so I am not sure what I am doing incorrectly now. I've shortened the query below to give the gist.

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 + '''''')
Kamil Gosciminski
  • 16,547
  • 8
  • 49
  • 72
  • You can't use variables in `OPENQUERY`. Try using dynamic SQL. e.g. `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)` – ZLK Feb 21 '16 at 21:33

1 Answers1

1

From Transact-SQL OPENQUERY documentation:

Remarks

OPENQUERY does not accept variables for its arguments.

One way to do this would be to pass the variable to a string storing the query to be executed and then execute it.

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)
Community
  • 1
  • 1
Kamil Gosciminski
  • 16,547
  • 8
  • 49
  • 72