Sql-Server

將查詢結果從一台伺服器移動到另一台伺服器上的另一個表

  • May 31, 2015

將一個伺服器中的查詢結果移動到另一台伺服器上的另一個表時,我有哪些選擇?數據包含約 400.000 行,因此不會很快。(它們都是 SQL Server 2008 R2)

謝謝大家。

一種選擇是通過 SQLCLR使用SqlBulkCopy類。您可以自己編寫程式碼,也可以直接下載免費版本的SQL#(我是它的作者),其中包含一個名為的儲存過程,該過程DB_BulkCopy封裝了此功能。在任何一種情況下,都需要給程序集一個PERMISSION_SETof EXTERNAL_ACCESS

如果使用 SQL# 儲存過程,您將執行類似於以下的操作:

DECLARE @MyQuery NVARCHAR(MAX);

SET @MyQuery = N'select some stuffs; -OR- EXEC SomeProc;';

EXEC SQL#.DB_BulkCopy
   --@SourceType = N'MSSQL',
   --@SourceConnection = N'Context Connection = true;',
   @SourceQuery = @MyQuery,
   @DestinationConnection =
          N'Data Source=(local); Integrated Security=true; Initial Catalog=tempdb;', -- CHANGE!!
   @DestinationTableName = N'SchemaName.TableName',
   @BatchSize = 3000,
   @NotifyAfterRows = 1000,
   @TimeOut = 1000 -- seconds
   --@ColumnMappings = N'',
   --@BulkCopyOptionsList = N'TableLock|UseInternalTransaction' -- Optional; see descripton below
   --@RowsCopied = @Rows OUTPUT

@BulkCopyOptionsList值:

  • TableLock= 在大容量複製操作期間獲取大容量更新鎖。如果未指定,則使用行鎖。
  • UseInternalTransaction= 指定時,每批大容量複製操作都將在一個事務中發生。
  • SQL# 手冊中描述的其他選項。

引用自:https://dba.stackexchange.com/questions/94464