【发布时间】:2015-07-19 17:25:14
【问题描述】:
我需要使用参数从链接服务器检索数据,例如@PickedDate。如果我跳过@A 和@B,查询工作正常,但由于缺少单引号,它总是返回错误。请指教,谢谢。
查询:
Declare @OPENQUERY nvarchar(500), @TSQL nvarchar(max), @LinkedServer nvarchar(20), @A varchar(5), @B varchar(5), @PickedDate varchar(8)
Set @PickedDate = '20150501'
Set @A = 'AAA'
Set @B = 'BBB'
Set @LinkedServer = 'LinkedServerName'
Set @OPENQUERY = 'Select * From Openquery('+ @LinkedServer + ','''
Set @TSQL = 'SELECT cases.casenum, user.username, code
From cases
Inner join user
On cases.casenum = user.user_id
Where cases.date_opened > DateAdd(day,1-datepart(dw,Convert(date,' + @PickedDate + ')), Convert(date,' + @PickedDate + '))
And cases.date_opened <= DateAdd(day,8-datepart(dw,Convert(date,' + @PickedDate + ')), Convert(date,' + @PickedDate + '))
And cases.code IN (' + @A +', ' + @B + ')
ORDER BY casenum'')'
Exec (@Openquery+@TSQL)
链接服务器“LinkedServerName”的 OLE DB 提供程序“MSDASQL”返回消息“[Sybase][ODBC Driver][SQL Anywhere]Column 'AAA' not found”。 消息 7321,第 16 层,状态 2,第 1 行 准备查询时出错“
SELECT cases.casenum, username, code
From cases
Inner join user
On cases.casenum = user.user_id
Where cases.date_opened >
DateAdd(day,1-datepart(dw,Convert(date,20150501)), Convert(date,20150501))
And cases.date_opened <=
DateAdd(day,8-datepart(dw,Convert(date,20150501)), Convert(date,20150501))
And cases.code IN (AAA, BBB)
ORDER BY casenum"
针对链接服务器“LinkedServerName”的 OLE DB 提供程序“MSDASQL”执行。
【问题讨论】:
-
And case.code IN ('+ chr(39) + @A +', ' + chr(39)+ @B + chr(39)+ ') 怎么样
-
它的行为与 (''' + @A +''', ''' + @B + ''') 相同。仍然给出“'AAA'附近的语法错误。”
标签: sql-server dynamic-sql linked-server openquery