简体   繁体   English

使用OpenQuery和参数执行存储过程

[英]Exec stored procedure with OpenQuery & parameter

Stored procedure as below. 存储过程如下。 It is using a linked server to Oracle. 它使用到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

If I call the stored procedure with parameters as shown below, the result is empty: 如果我使用如下所示的参数调用存储过程,则结果为空:

EXEC [dbo].[SVOPS_ZsmartPaymentView] @param01 = 'T131612073600'

But if I run the statement directly like below, there is result. 但是,如果我直接像下面那样运行该语句,就会有结果。

SELECT * 
FROM openquery(ZSMART_PROD, 'SELECT * FROM CC.V_PAYMENT WHERE BANK_SN=''T131612073600''')

Any idea why it returned empty result if executed using the stored procedure? 知道为什么如果使用存储过程执行它会返回空结果吗?

Try this: 尝试这个:

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

I follow the sample from https://support.microsoft.com/en-us/help/314520/how-to-pass-a-variable-to-a-linked-server-query . 我遵循https://support.microsoft.com/zh-cn/help/314520/how-to-pass-a-variable-to-a-linked-server-query中的示例。

And it works. 而且有效。

Pass Basic Values 传递基本价值观

When the basic Transact-SQL statement is known, but you have to pass in one or more specific values, use code that is similar to the following sample: 当基本的Transact-SQL语句已知但您必须传递一个或多个特定值时,请使用类似于以下示例的代码:

DECLARE @TSQL varchar(8000), @VAR char(2) SELECT @VAR = 'CA' SELECT @TSQL = 'SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state = ''''' + @VAR + ''''''')' EXEC (@TSQL) 宣告@TSQL varchar(8000),@VAR char(2)SELECT @VAR ='CA'SELECT @TSQL ='SELECT * FROM OPENQUERY(MyLinkedServer,''SELECT * FROM pubs.dbo.authors WHERE state ='''' '+ @VAR +''''''')'EXEC(@TSQL)

Thanks. 谢谢。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM