存储过程如下。它正在使用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''')
知道为什么如果使用存储过程执行它会返回空结果?
答案 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)
感谢。