链接服务器的参数化查询

时间:2019-04-17 08:58:33

标签: sql-server dynamic-sql

嗨,我遵循了一个参数化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

有关更多参数,只需添加列名并添加另一个?

这很好用,很干净!

0 个答案:

没有答案