如果我正确理解您的问题,您可以使用作为弹性数据库的一部分引入的 sp_execute_remote 函数。
文档在这里:
https://msdn.microsoft.com/en-us/library/mt703714.aspx
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
在 Subscription 2,DB2 我运行这个命令:
exec sp_insert_name_via_remote_sp 'FN5', 'SN5'
这成功地插入到 Subscription 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
)
希望对你有帮助