首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌套动态查询与SP_EXECUTE_REMOTE绑定参数

嵌套动态查询与SP_EXECUTE_REMOTE绑定参数
EN

Database Administration用户
提问于 2017-06-21 17:11:27
回答 2查看 2.6K关注 0票数 1

我有两个Azure数据库,比如DB1(主数据库)和DB2(备用数据库)。我为两个DB1创建了两个外部数据源,这样它们就可以互相交谈了

DB1的外部数据源是External_DB2

DB2的外部数据源是External_DB1

我的DB2中有一个Sp。

就像我DB1.Say sp_DB1中的另一个sp (@param1 1,@outparam)

(Ps:@outparam是输出参数)

我的sp_DB2是主Sp (它调用所有其他Sp,即sp_DB1)。

在我的sp_DB2中,我有如下代码

代码语言:javascript
运行
复制
EXEC SP_EXECUTE_REMOTE
N'External_DB1',
N' DECLARE @param1 nvarchar(max),@outparam nvarchar(max)
EXEC SP_EXECUTESQL N''EXEC DBO.[sp_DB1]@param1,@outparam OUTPUT'',
N''@param1 nvarchar(max),@outparam nvarchar(max) OUTPUT'',
@param1 ,@outparam OUTPUT
SELECT @param1 AS Paramvalue,@outparam AS outputvalue'

由于sp_Execute_remote不支持输出参数,所以我在这里做的就像above.But一样,所以我想从原始Sp (sp_DB2)绑定@above.But 1值。

如果我试着这样做,

代码语言:javascript
运行
复制
EXEC SP_EXECUTE_REMOTE
    N'External_DB1',
    N' DECLARE @param1 nvarchar(max)=''Testing'',@outparam nvarchar(max)
    EXEC SP_EXECUTESQL N''EXEC DBO.[sp_DB1]@param1,@outparam OUTPUT'',
    N''@param1 nvarchar(max),@outparam nvarchar(max) OUTPUT'',
    @param1 ,@outparam OUTPUT
    SELECT @param1 AS Paramvalue,@outparam AS outputvalue'

其中,我将@Param1 1的值硬编码为代码中的测试。

但实际上@Param1 1的值应该来自原始Sp,即sp_DB2

当我像sp_DB2( the )一样调用原始Sp时,它应该绑定到另一个Sp的@Param1 1,即sp_DB1

通过这样做,我们可以减少Sp内部测试的硬编码值。

请有人帮我解决这个问题

提前谢谢!

杰伦

EN

回答 2

Database Administration用户

回答已采纳

发布于 2017-06-22 06:53:03

Azure中的SP_EXECUTE_REMOTE与本机sp_executesql非常相似。因此,您应该能够绑定params & values。但是我相信有一个限制,你不能从它得到输出参数值。试试这个,看看它是否适用于你的情况。谢谢。

代码语言:javascript
运行
复制
EXEC SP_EXECUTE_REMOTE
    N'External_DB1',
    N' DECLARE @param1 nvarchar(max)= @param1_from_sp_DB2, @outparam nvarchar(max)
    EXEC SP_EXECUTESQL N''EXEC DBO.[sp_DB1]@param1,@outparam OUTPUT'',
    N''@param1 nvarchar(max),@outparam nvarchar(max) OUTPUT'',
    @param1 ,@outparam OUTPUT
    SELECT @param1 AS Paramvalue,@outparam AS outputvalue', 
    N'@param1_from_sp_DB2 nvarchar(max)', 
    @param1 --Since this is the input param name from sp_DB2
票数 0
EN

Database Administration用户

发布于 2018-03-15 13:08:53

请试试这个:

代码语言:javascript
运行
复制
 Create PROCEDURE prLocalProcCallingRemoteProcWithOutput
        @LocalParam varchar(100)
    AS
    BEGIN
    SET NOCOUNT ON;

    EXEC SP_EXECUTE_REMOTE
    N'External_DB1',
    N' DECLARE  @outparam nvarchar(max)
    EXEC SP_EXECUTESQL N''EXEC DBO.[sp_DB1] @param1,@outparam OUTPUT'',
    N''@param1 nvarchar(max),@outparam nvarchar(max) OUTPUT'',
    @param1 ,@outparam OUTPUT
    SELECT @param1 AS Paramvalue,@outparam AS outputvalue',
     @params = N'@param1 nvarchar(100)',
    @param1 = @LocalParam


    END
    GO
票数 -2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/176917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档