【发布时间】:2015-05-12 02:57:49
【问题描述】:
Declare @OPENQUERY nvarchar(500), @TSQL nvarchar(max), @LinkedServer nvarchar(20), @PickedDate varchar(8)
Set @LinkedServer = 'LinkedServerName'
Set @OPENQUERY = 'Select * From Openquery('+ @LinkedServer + ','''
Set @TSQL = 'SELECT sum(iif(left(code,1)=''''C'''', 1, 0) As ActiveCases
From cases
Where cases.date_opened = ''''' + @vcPickedDate + '''''
'')'
Exec (@Openquery+@TSQL)
当我运行这个查询时,它返回了消息
“[Sybase][ODBC 驱动程序][SQL Anywhere]第 1 行 '=' 附近的语法错误”。 准备查询“SELECT”时出错 Sum(IIf(Left(code,1)='C',1,0)) AS Cases FROM cases WHERE case.date_opened = '20150511' " 用于针对 OLE DB 提供程序执行 链接服务器“LinkedServerName”的“MSDASQL”。
我认为这与 openquery 有关。如果我不使用 openquery 只运行以下查询,它就可以正常工作:
SELECT sum(iif(left(code,1)=''''C'''', 1, 0) As ActiveCases
From cases
Where cases.date_opened = ''''' + @vcPickedDate + '''''
【问题讨论】:
-
我认为问题在于您使用了转义的单引号。
-
您是否尝试过使用本机客户端 OLEDB 提供程序 - MSDASQL 是旧的(SQLNCLI12)?
-
我必须为 ODBC 驱动程序使用 MSDASQL、OLEDB 提供程序。但是您的评论可以帮助我解决问题。谢谢埃里克。
标签: sql-server dynamic-sql linked-server iif openquery