Sql 带OpenQuery的Exec存储过程&;参数

Sql 带OpenQuery的Exec存储过程&;参数,sql,sql-server,Sql,Sql Server,存储过程如下所示。它正在使用一个链接到Oracle的服务器 ALTER PROCEDURE [dbo].[SVOPS_ZsmartPaymentView] (@param01 VARCHAR(255)) AS BEGIN SELECT * FROM OPENQUERY(ZSMART_PROD, 'SELECT BANK_SN FROM CC.V_PAYMENT WHERE BANK_SN=''@param01''') END 如果使用如下所示的参数调用存储过程,则结果

存储过程如下所示。它正在使用一个链接到Oracle的服务器

ALTER PROCEDURE [dbo].[SVOPS_ZsmartPaymentView]
    (@param01 VARCHAR(255))
AS
BEGIN
    SELECT * 
    FROM OPENQUERY(ZSMART_PROD, 'SELECT BANK_SN FROM CC.V_PAYMENT WHERE BANK_SN=''@param01''')
END
如果使用如下所示的参数调用存储过程,则结果为空:

EXEC [dbo].[SVOPS_ZsmartPaymentView] @param01 = 'T131612073600'
但如果我像下面那样直接运行语句,就会得到结果

SELECT * 
FROM openquery(ZSMART_PROD, 'SELECT * FROM CC.V_PAYMENT WHERE BANK_SN=''T131612073600''')
知道为什么使用存储过程执行时返回空结果吗?

试试以下方法:

ALTER PROCEDURE [dbo].[SVOPS_ZsmartPaymentView]
    (@param01 VARCHAR(255))
AS
BEGIN
    SELECT * 
    FROM OPENQUERY(ZSMART_PROD, 'SELECT BANK_SN FROM CC.V_PAYMENT WHERE BANK_SN=''' + @param01 + '''')
END
我跟随来自中国的样品

它是有效的

传递基本值

如果已知基本Transact-SQL语句,但必须传入一个或多个特定值,请使用类似于以下示例的代码:

声明@TSQL varchar(8000),@varchar(2)选择@VAR='CA'选择 @TSQL='从OPENQUERY中选择*(MyLinkedServer),从 pubs.dbo.authors,其中state=''''+@VAR+''''')EXEC(@TSQL)


谢谢。

可能重复@Peeyus,你渴望贡献(并获得学分)是可以理解的,但这绝对不是可能的重复。@FDavidov如果你仔细阅读链接中的问题,你会发现链接问题的答案解决了实际问题。如果我想要学分,我会回答,而不是评论的链接。(检查链接问题答案中的Pass Basic Values部分)