gpt4 book ai didi

sql-server - 链接服务器插入选择性能

转载 作者:行者123 更新时间:2023-12-02 15:22:07 25 4
gpt4 key购买 nike

假设我的本地有一个表,即 Local_Table,并且我有另一台服务器和另一个数据库和表,即 Remote_Table(表结构相同) .

Local_Table 有数据,Remote_Table 没有。我想使用以下查询将数据从 Local_Table 传输到 Remote_Table:

Insert into RemoteServer.RemoteDb..Remote_Table
select * from Local_Table (nolock)

但性能相当慢。

但是,当我使用 SQL Server 导入导出向导时,传输速度非常快。

我做错了什么?为什么使用导入-导出向导时速度快,而使用插入-选择语句时速度慢?有什么想法吗?

最佳答案

最快的方法是拉取数据而不是推送数据。当表被推送时,每一行都需要一个连接、一个插入和一个断开连接。

如果您无法提取数据,因为服务器之间存在单向信任关系,解决方法是将整个表构建为一个巨大的 T-SQL 语句并同时运行它。

DECLARE @xml XML

SET @xml = (
SELECT 'insert Remote_Table values (' + '''' + isnull(first_col, 'NULL') + ''',' +
-- repeat for each col
'''' + isnull(last_col, 'NULL') + '''' + ');'
FROM Local_Table
FOR XML path('')
) --This concatenates all the rows into a single xml object, the empty path keeps it from having <colname> </colname> wrapped arround each value

DECLARE @sql AS VARCHAR(max)

SET @sql = 'set nocount on;' + cast(@xml AS VARCHAR(max)) + 'set nocount off;' --Converts XML back to a long string

EXEC ('use RemoteDb;' + @sql) AT RemoteServer

关于sql-server - 链接服务器插入选择性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12458052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com