[英]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.