Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Performances d'insertion-sélection du serveur lié

Le moyen le plus rapide consiste à extraire les données plutôt qu'à les pousser. Lorsque les tables sont poussées, chaque ligne nécessite une connexion, une insertion et une déconnexion.

Si vous ne pouvez pas extraire les données, car vous avez une relation de confiance à sens unique entre les serveurs, la solution consiste à construire la table entière sous la forme d'une instruction T-SQL géante et à l'exécuter en une seule fois.

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