使用OpenQuery& Exec存储过程参数

时间:2018-06-05 04:13:41

标签: 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

如果我使用如下所示的参数调用存储过程,则结果为空:

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

但如果我像下面那样直接运行语句,就会有结果。

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

知道为什么如果使用存储过程执行它会返回空结果?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我关注https://support.microsoft.com/en-us/help/314520/how-to-pass-a-variable-to-a-linked-server-query的示例。

它有效。

传递基本值

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

  

DECLARE @TSQL varchar(8000),@ VAR char(2)SELECT @VAR =' CA'选择   @TSQL =' SELECT * FROM OPENQUERY(MyLinkedServer,'' SELECT * FROM   pubs.dbo.authors WHERE state =''''' + @VAR +'''''')'执行(@TSQL)

感谢。