我在服务器X上有一个包含源数据的数据库。 我在服务器Y上也有一个数据库,其中包含我需要使用服务器X上的数据进行扩充的数据。
目前我们在服务器Y上有一个夜间作业,它调用服务器X上的存储过程,将其插入表变量,然后将数据作为xml发送到服务器Y上数据库中的存储过程。
以下是代码的基本内容:
--Get data from source
DECLARE @MySourceData TABLE
(
[ColumnX] VARCHAR(50),
[ColumnY] VARCHAR(50)
);
INSERT INTO @MySourceData EXECUTE [ServerX].SourceDatabase.dbo.[pListData];
DECLARE @XmlData XML;
SELECT
@XmlData =
(
SELECT
[ColumnX]
,[ColumnY]
FROM
@MySourceData
FOR XML RAW ('Item'), ROOT('Items'), ELEMENTS, TYPE
)
--Send data to target
EXEC TargetDatabase.dbo.pImportData @XmlData;
此方法将任何服务器名称或数据库名称保留在作业步骤的sql中(我们将其视为配置的一部分),并允许我们遵守使用存储过程进行数据访问的内部开发标准。虽然这个特定的解决方案只处理了几千条记录,而xml却没有那么大,但如果我们尝试在数据集较大的场景中应用它,那么它的扩展程度有多差。如果其他人有更好的建议,我很好奇。