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