我有两个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中,我有如下代码
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值。
如果我试着这样做,
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内部测试的硬编码值。
请有人帮我解决这个问题
提前谢谢!
杰伦
发布于 2017-06-22 06:53:03
Azure中的SP_EXECUTE_REMOTE与本机sp_executesql非常相似。因此,您应该能够绑定params & values。但是我相信有一个限制,你不能从它得到输出参数值。试试这个,看看它是否适用于你的情况。谢谢。
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
发布于 2018-03-15 13:08:53
请试试这个:
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
https://dba.stackexchange.com/questions/176917
复制相似问题