問題タブ [sqlbulkcopy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
4062 参照

sql-server - SqlBulkCopyで行の順序を維持するには?

SqlBulkCopy を使用して、プログラムで Excel から SQL Server 2005 にデータをエクスポートしています。私が抱えている唯一の問題は、Excelファイルにある行シーケンスが保持されないことです。並べ替える列がありません。Excel スプレッドシートに表示されるのと同じ順序でレコードを挿入したいだけです。

Excel ファイルを変更することはできず、取得したもので作業する必要があります。既存の列のいずれかで並べ替えると、順序が崩れます。

助けてください。

PSスプレッドシートにID列を挿入してしまいました。エクスポート/インポート中に順序を維持する方法がないようです

0 投票する
3 に答える
3010 参照

c# - SqlBulkCopy を使用して非常に大きなテーブルを埋める最良の方法は何ですか?

毎晩、ODBC ソースから SQL Server 2005 テーブルに 800 万を超えるレコードを入力する必要があります。現在、次のような構文 select を使用して、リンク サーバーから挿入ステートメントを使用しています。

これは非常に非効率的で、実行に数時間かかります。この質問にあるコードと同様の SqlBulkInsert コードを使用してソリューションをコーディングしている最中です。

その質問のコードは、最初にメモリにデータ テーブルを設定し、次にそのデータ テーブルを SqlBulkInserts WriteToServer メソッドに渡します。

移入されたデータテーブルが、実行中のマシン (私の場合は 16GB のメモリを搭載したサーバー) で使用できるよりも多くのメモリを使用している場合はどうすればよいですか?

x から n までのレコードのみを埋めることができるオーバーロードされた ODBCDataAdapter fillメソッドを使用することを考えました (x は開始インデックス、n は埋めるレコードの数です)。ただし、ソースでselectステートメントを何度も再実行することを意味するため、現在持っているソリューションよりもさらに遅いソリューションになる可能性があります。

私は何をすべきか?すべてを一度に実装して、OS にメモリを管理させますか? チャンクで入力する必要がありますか?私が考えていない別の解決策はありますか?

0 投票する
2 に答える
14634 参照

sql-server-2005 - SqlBulkInsert - 火災トリガーを設定し、制約を確認する方法は?

権限が制限されたデータベース ユーザーを使用して、ADO.NET 2.0 SqlBulkCopy オブジェクトを C# メソッドから MS SQL 2005 データベースに一括挿入しています。操作を実行しようとすると、次のエラー メッセージが表示されます。

一括コピーに失敗しました。ユーザーには、テーブル 'theTable' に対する ALTER TABLE 権限がありません。'FIRE_TRIGGERS'テーブルにトリガーまたは チェック制約があるが'CHECK_CONSTRAINTS'、一括コピー コマンドのオプションとして一括ヒントが指定されていない場合、一括コピー操作のターゲット テーブルには ALTER TABLE 権限が必要です。

いくつかのドキュメントを読み、そのようなことを指定できるコンストラクターで一括コピー オブジェクトを作成しました。

しかし、これは何も変更しません。以前と同じエラー メッセージが表示されます。他の SqlBulkCopyOptions 値のいくつかをいじってみましたが、うまくいきませんでした。これで問題が解決すると本当に思っていましたが、何か不足していますか?

ユーザーにテーブルの ALTER を許可した後に手順をテストしたところ、操作は成功しました。ただし、これは私の状況ではオプションではありません。

0 投票する
7 に答える
35768 参照

c# - SqlBulkCopy が機能しない

DataSetExcelシートからデータが取り込まれています。SQLBulk Copy を使用して、PK であるLead_Hdrテーブルにレコードを挿入したいと考えていました。LeadId

以下のコードの実行中に次のエラーが発生します。

指定された ColumnMapping は、ソースまたは宛先のどの列とも一致しません

0 投票する
3 に答える
1160 参照

sql-server - SQLBulkCopyは.mdfファイルサイズを劇的に増加させますか?

SqlBulkCopyクラスを使用して、SQLServerDBへの一括挿入を行っています。

DBに関連付けられている.mdfファイルの元のサイズは1508Mbです。

(約400万レコードの同じデータで)
BatchSizeを100000で実行すると、.mdfのサイズは1661MBになります。
BatchSizeが1000000の場合、.mdfのサイズは1659MBに増加します。

なぜこのバリエーション?テスターがバッチサイズ100で(同じデータに対して)実行すると、使用可能な20ギガすべてを使い果たすまで、.mdfファイルがめちゃくちゃ大きくなることを除いて、このような小さな変化は無視できます。使用可能なスペースが不足しているため、エラーが発生します。

これは、SqlBulkCopyに割り当てられる固定サイズのブロックがあるためですか?
BatchSizes> 100000で正常に動作しますが、この奇妙な動作/バグの根本的な原因を理解したいと思います。

0 投票する
1 に答える
2573 参照

sql - DataTable からの SQL CLR SqlBulkCopy

CLR プロシージャにメモリ内 DataTable があります。重要な処理の後、DataTable には、データベース内のテーブルにロードする必要がある大量のデータが含まれています。残念ながら、コンテキスト接続を使用しているため、 SqlBulkCopy は機能しません (エラーがスローされます: The requested operation is not available on the context connection Outline of context definitions )。

追加の通常の接続を構築し、それを使用して SQLBulkCopy を実行することを考えています。これは、コンテキスト接続を介して通常の接続を使用するオーバーヘッドを考えると、かなりばかげているように思えます。DataTable の行を繰り返し処理し、それぞれにレコードを挿入することを考えましたが、サイズが非常に大きく、SQLBulkCopy の方が適しているようです。

私たちは DataTable と結婚しておらず、CLR プロシージャから膨大な量のデータをデータベースに挿入する最良の方法を探しているだけです。DataTable に関する最後の注意事項は、基になるデータベース テーブルを表していますが、DataSet または TableAdapter を介してテーブルに関連付けられていません。CLR プロシージャでこれを行う手段は、すぐにはわかりませんでした。これを行い、AcceptChanges または Update メソッドを使用することは、許容できる解決策です。

0 投票する
1 に答える
859 参照

asp.net - SQLBulkCopyを使用するときにテキストをExcelからSQLServerに追加する

パートナーがSQLBulkCopyを使用して統計を含むExcelファイルをアップロードできるページを作成しました。ファイルには複数のシートがあり、各行のDBの列にシートの名前を追加する必要があります。シートの名前は変更されないため、名前をハードコーディングしても問題ありません。どうすればこれを解決できますか?

0 投票する
2 に答える
7214 参照

sql-server - ODBC データベースからテーブルをインポートするにはどうすればよいですか?

たくさんのテーブルがある ODBC データベース (サードパーティの DB) があります。「GetSchema」を使用して、そこにあるテーブルのリストを取得できます。また、SQLBulkCopy を使用して、これらのテーブルから SQL Server テーブルにデータをコピーすることもできます (SQL Server で同じ構造の Destination テーブルを作成した場合のみ)。

しかし、ここにシナリオがあります-更新がODBCデータベースに適用され、新しいテーブルが作成されました(ODBCデータベースのテーブルの古いリストと新しいリストを比較することで、それを理解できます.

一括コピー操作を使用する前に宛先テーブルを作成できるように、テーブル全体 (空またはデータあり) をインポートするか、ソース テーブルの SQL スクリプトを生成する方法はありますか?

ありがとうRD

0 投票する
2 に答える
7113 参照

sqlbulkcopy - SqlBulkCopy の欠点は何ですか

「C# を使用して巨大なデータを DB に挿入する最良の方法」について調査したところ、多くの人が SqlBulkCopy の使用を提案しました。私がそれを試した後、それは本当に私を驚かせました。間違いなく、SqlBulkCopy は非常に高速です。SqlBulkCopy は、データ (特に巨大なデータ) を挿入するのに最適な方法のようです。しかし、なぜそれを常に使用しないのですか。SqlBulkCopy を使用することの欠点はありますか?