嗨,我遵循了一个参数化openqueries的示例,这是避免所有丑陋引号的一种选择。
DECLARE @uap NVARCHAR(50)
SELECT @uap = 'UAP1'
EXEC MACPAC.master.dbo.sp_executesql
N'SELECT RD6001 as Referencia,
RD6002 as UAP,
RD6030 as QTD_AB_PDP_W01,
RD6031 AS QTD_AB_PDP_W02
FROM D805DATPOR.TRP060D
WHERE RD6001 not like ''%OP%''
AND RD6001 not like ''%PT%''
AND RD6002 = @uap',
N'@uap nvarchar(50)',
@uap
这是例子
DECLARE @VAR char(2)
SELECT @VAR = 'CA'
EXEC MyLinkedServer.master.dbo.sp_executesql
N'SELECT * FROM pubs.dbo.authors WHERE state = @state',
N'@state char(2)',
@VAR
但是我的方法不起作用
链接服务器“ MACPAC”的OLE DB访问接口“ IBMDA400”返回消息“ SQL0104:令牌{无效。有效令牌:(CL结束GET SET CALL DROP FREE HOLD LOCK OPEN OF ALTER BEGIN。 原因。 。 。 。 。 :在令牌{处检测到语法错误。令牌{不是有效令牌。有效令牌的部分列表是(CL END GET SET CALL DROP FREE HOLD LOCK OPEN WITH ALTER BEGIN。此列表假定语句直到令牌为止都是正确的。错误可能在语句中更早,但是语句的语法恢复。。。:执行以下一项或多项操作,然后重试该请求:-验证令牌{区域中的SQL语句。更正该语句。错误可能是缺少逗号或引号,则可能是拼写错误的单词,或者可能与子句的顺序有关。-如果错误标记为,请更正SQL语句,因为它的结尾不是有效的子句。” Msg 7212,第17级,状态1,第8行 无法在远程服务器“ MACPAC”上执行过程“ sp_executesql”。
更新
我忘了提到链接服务器提供者是IBM,所以我猜它在ORACLE中,对此我一无所知。
以下是对链接服务器(ORACLE)执行参数化查询的建议方法
DECLARE @UAP NVARCHAR(50)
SET @UAP = 'UAP1'
EXEC ('SELECT RD6001 as Referencia,
RD6002 as UAP,
RD6030 as QTD_AB_PDP_W01
FROM D805DATPOR.TRP060D
where RD6001 not like ''%OP%''
and RD6001 not like ''%PT%''
and RD6002 = ?', @UAP)
AT MACPAC
有关更多参数,只需添加列名并添加另一个?
这很好用,很干净!