初期データ:
相互に直接アクセスできる2つのSQLServer。そのうちの1つはリンクサーバーで構成されています。
次の形式のSQLクエリ:
insert into LocalDatabaseName.dbo.TableName (column1, column2, ..., columnN)
select column1, column2, ..., columnN
from LinkedServerName.RemoteDatabaseName.dbo.TableName
タスク:あるサーバーから別のサーバーにできるだけ早くレコードをコピーする
同様のクエリが40k(40,000)レコードで1分以上実行されているという事実に直面しました。このようなクエリの数またはレコードの数が増えると、パフォーマンスが大幅に低下し、SQLツールを使用してクエリを最適化する方法がなくなります。ImportExportDataSqlアプリを使用すると、リンクサーバーを使用せずにこのクエリを2秒に高速化できました。
ImportExportDataSqlアプリケーションを自分で作成し、数年間絶えず改良しました。アプリケーションを作成するための主な要件は、移植性、サードパーティライブラリ(NET Framework 3.5を除く)をインストールせずにすべてのバージョンのWindowsで動作すること、シンプルなインターフェイス、および高性能です。
ImportExportDataSql-「bcp」の代わりとなるユニバーサルデータコンバーター

( CSV Excel) ( CSV). bcp, . "bcp", , .
ImportExportDataSql , . :
ImportExportDataSql :
ImportExportDataSql.exe -ConnectionName=" " -TaskName=" 1" -TaskName=" 2" [-Log="C:\FolderName\LogFileName.log"]
:
-ConnectionName - , " " " "

-TaskName -
-Log - . . -, Logs\UserName\ImportExportDataSql.log
ImportExportDataSql
-
( bcp) - bcp ( bat )
- varbinary
SQL - SELECT SQL
SQL ( INSERT)
SQL ( UPDATE)
SQL
Excel SQL
CSV
CSV SQL
CSV
SQL - SQL
- SELECT
, SQL , . (, ).

( ) Linked Server, 1 2 . C# System.Data.SqlClient: SqlConnection, SqlDataReader, SqlCommand SqlBulkCopy.
OutOfMemoryException, (). , . , :
SQL - ,
:
- , " ", . (.) " " , .
- . , ( , )
- , . , 100 , " " = 10, 10 .
-
" " , . , , , (insert into ... select ...), , tempdb ( " " ).
ImportExportDataSql
ImportExportDataSql . .
, CSV Excel.
CSV ( 1) , CSV. CSV, .
SQL , , "Messages" SQL Server Management Studio.
" SQL" (jobs), , .
C# SqlBulkCopy , Linked Server.
ImportExportDataSql
「bcp」の欠点について説明している「C#でのクイックリードCSV」の記事
VKコミュニティ、作者とチャットしたい人のために