调用存储来自另一个数据库的过程,并将数据插入Azure中的远程数据库

调用存储来自另一个数据库的过程,并将数据插入Azure中的远程数据库,azure,Azure,我在azure中有2个数据库db1和db2。 db1具有存储过程存储单元p1, db2正在使用存储过程存储。 存储的_p1从存储的_p2调用。 用于从使用外部源和外部表的其他数据库调用表。 外部表仅用于DDL。但是,在调用storaged_p2中的storaged_p1时,需要将数据插入db1中的表中。远程数据库(db1)上的表具有标识列 由于外部表是DDL,所以有没有办法将数据插入实际表而不是外部表 如果我正确理解您的问题,您可以使用作为弹性数据库一部分引入的sp_execute_remote

我在azure中有2个数据库db1和db2。 db1具有存储过程存储单元p1, db2正在使用存储过程存储。 存储的_p1从存储的_p2调用。 用于从使用外部源和外部表的其他数据库调用表。 外部表仅用于DDL。但是,在调用storaged_p2中的storaged_p1时,需要将数据插入db1中的表中。远程数据库(db1)上的表具有标识列


由于外部表是DDL,所以有没有办法将数据插入实际表而不是外部表

如果我正确理解您的问题,您可以使用作为弹性数据库一部分引入的sp_execute_remote函数

文件如下:

以下是一个sp_execute_remote如何在我理解为您的设置中使用的示例:

订阅1、DB1具有以下表和存储过程:

CREATE TABLE [dbo].[tblNames](
    [id] [smallint] IDENTITY(1,1) NOT NULL,
    [FirstName] [varchar](50) NULL,
    [Surname] [varchar](255) NULL,
 CONSTRAINT [PK_tblNames] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)

GO

CREATE PROCEDURE [dbo].[sp_Insert_New_Name] @FirstName varchar(50), @Surname varchar(255)
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO tblNames VALUES (@FirstName, @Surname)

END

GO
订阅2中,DB2有以下存储过程:

CREATE PROCEDURE sp_Insert_Name_via_Remote_SP
    @FN varchar(50), @SN varchar(255)
AS
BEGIN

    SET NOCOUNT ON;
EXEC sp_execute_remote @data_source_name  = N'dsRemoteDbinRemoteSub', 
@stmt = N'sp_Insert_New_Name @FirstName, @Surname', 
@params = N'@FirstName varchar(50), @Surname varchar(255)',
@FirstName = @FN, @Surname = @SN

END
GO
在订阅2中,我运行以下命令:

exec sp_insert_name_via_remote_sp 'FN5', 'SN5'
这将成功地插入到订阅1和DB1中的表中

注意:我在这里的第一次尝试使用了输出变量,因此您可以返回插入的标识,但sp_execute_remote似乎不支持输出变量

为完整起见,在第二个数据库中使用了以下代码来配置远程数据源:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Password>';

 CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
 WITH IDENTITY = '<DB username>',
 SECRET = '<DB password>';


 CREATE EXTERNAL DATA SOURCE dsRemoteDbinRemoteSub
    WITH (   
        TYPE = RDBMS,  
        LOCATION = '<DB Server Name>.database.windows.net',  
        DATABASE_NAME = '<DB Name>',  
        CREDENTIAL = ElasticDBQueryCred 
    )  
通过密码创建主密钥加密=“”;
创建数据库范围的凭据ElasticDBQueryCred
使用IDENTITY='',
秘密='';
创建外部数据源dsRemoteDbinRemoteSub
与(
类型=关系数据库管理系统,
位置='.database.windows.net',
数据库名称=“”,
凭证=ElasticDBQueryCred
)  

希望这有帮助

谢谢伊恩的回复。让我澄清一下。如何调用Azure中远程数据库中的存储过程。任何SP_execute_remote的例子都会很有帮助。谢谢你的时间,伊恩。这对我很有帮助。