用于消除跨服务器连接的选项

时间:2015-06-22 22:33:30

标签: sql-server sql-server-2008

我在服务器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却没有那么大,但如果我们尝试在数据集较大的场景中应用它,那么它的扩展程度有多差。如果其他人有更好的建议,我很好奇。

0 个答案:

没有答案