問題タブ [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.
.net - SQL Server.NETSqlBulkCopyクラスは例外後も実行を継続します
SqlBulkCopyを使用して大量のデータを挿入しています。データのソースに重複した行が含まれている可能性があります。私は宛先テーブルに一意性のインデックスを持っています。
最初に複製された行が表示されると、SqlBulkCopyは例外をスローし、内部トランザクションをロールバックします。例外を無視して挿入し続けてほしい。(例外が重複した行の場合のみ)。
この問題についていくつか質問がありますが、それらはすべてレポートの重複行を探しています。私はそれらを気にしません。
c# - WriteToServer(DataTable)を実行すると、SqlBulkCopyはSystem.FormatExceptionをスローします
現在、CSVファイルからデータを読み取り、SQLテーブルにインポートするメソッドを作成しています。
このメソッドを実行するときの問題は、常にs.WriteToServer(dt)で例外がスローされることです。言って
System.FormatException:文字列が有効な日時として認識されませんでした。インデックス0から始まる不明な単語があります。
デバッグして、すべてのデータがDataTableに正しく読み込まれていることを確認しました。これが私のCSVファイルのデータ行の例です
と私のSQLテーブルスキーマ:
sql-server - SQL へのバルク データの挿入: OLEDB IRowsetFastLoad と Ado.Net SqlBulkCopy の比較
SQL サーバーに大量のデータを挿入するためのさまざまな方法を評価しています。Ado.Net のSqlBulkCopyクラスとOLEDB のIRowsetFastLoadインターフェイスを見つけました。私の知る限り、IRowsetFastLoad は私のベース プラットフォームである C# にマップされていないため、.net 用の IRowsetFastLoad のラッパーを作成する価値があるかどうかを評価しているので、アプリケーションで使用できます。
IRowsetFastLoad が実際に SqlBulkInsert よりも優れたパフォーマンスを発揮するかどうかは誰にもわかりません。そのようなラッパーを作成する価値はありますか?
sql-server-2008 - トリガーでループしますか?
私はこの次のシナリオを手に入れました、
COUNTRY、STATE、CITY、STREETの4つのテーブルがあり、
上記のレコードを含むExcelファイルがあります。現時点ではおそらく2000行です。
SqlBulkCopyを使用してデータを一時テーブルにインポートし、テーブルにIMPORTという名前を付けます。
そして、挿入されたレコードを取得し、国、州、都市、通りを分割して、それぞれのテーブルに挿入するIMPORTテーブルに挿入のトリガーを1つ作成しました。
このトリガーでは、いくつかの条件付きチェックを実行する必要があります。たとえば、COUNTRY名がすでに存在する場合は、COUNTRY_IDを返します。それ以外の場合は、それを挿入して新しいCOUNTRY_IDを取得します。
上記は、Excelファイルに1行しかない場合に機能します。インポート用に元のExcelを配置すると、sqlbulkcopyによってINSERTEDが複数のレコードを持つようになるため
、トリガーの次のステートメントが「INSERTEDから国を選択」に失敗することがわかりました。
テーブル構造
国
- Country_ID
- 国名
州
- State_ID
- Country_ID
- State_Name
街
- City_ID
- State_ID
- Country_ID
- 市の名前
街
- Street_ID
- City_ID
- State_ID
- Country_ID
- 道の名前
輸入
- 国名
- State_Name
- 市の名前
- 道の名前
それで、INSERTEDのすべてのレコードをループするループステートメントをトリガーに含めることはできますか?
または、これに最善の方法で対処する方法は?
注:彼らはすでにそれを使用しているので、私はそれらのテーブル構造とそれらの関係を制御できません。
前もって感謝します。
c# - データテーブルの使用時にSqlBulkCopy WriteToServerメソッドがデータを書き込んでいない
次の処理はすべてローカル マシンで行われます。
ソース データベース (サーバー上) と宛先データベース (ローカル マシン) があります。ソースから宛先にコピーしたいテーブルのリストがあります。つまり、server-->local です。
まず、単純な SELECT * ステートメントと Adpter.Fill(myDataTable) を使用してサーバーからのすべてのデータを DataTable 配列に格納し、次に myDataTable を DataTable 配列に追加します。
次に、ディスク上にある SQL スクリプトをローカルで実行して、ローカル データベースを削除し、再作成します。[右クリック-->タスク-->スクリプトの生成]を使用してSSMSからスクリプトを取得しました
ローカル データベースを削除して再作成した後、以前の DataTable 配列で SqlBulkCopy を使用して、新しく作成したローカル データベースにサーバー データをコピーします。
問題は、SqlBulkCopy 部分に到達するまで、すべてが期待どおりに機能することです。例外もメッセージも、bcp_SqlRowsCopied イベントも発生しません。データは単純にコピーされません...ここで何が起こっているのか、少なくとも何らかのエラーが予想されます...
コンソール アプリケーションのコード全体を以下に示します。まだいかなる種類のエラー処理も行われていないため、本番環境に対応していないことに注意してください。
c# - IDが同じであるがSqlBulkCopyを使用して異なる列を変更する3つのレコード
SqlBulkCopyを使用して変換を行っています。現在、クラスのIListコレクションがあり、基本的にSqlBulkCopyで使用するためにDataTableに変換できます。
問題は、同じIDで3つのレコードを持つことができることです。
説明させてください..ここに3つのレコードがあります
基本的に私はそれらを順番に挿入する必要があります..したがって、レコード1が存在しない場合は挿入し、次のレコードが存在する場合は、新しい1を挿入するのではなくレコードを更新する必要があります(IDはまだ1であることに注意してください)。 2番目のレコードの場合、ID1のNameとAddressの両方の列を置き換えます。
最後に、3番目のレコードで、名前は存在しないがID 1であり、マンチェスターのアドレスを持っていることに気付きます。したがって、レコードを更新する必要がありますが、名前を変更せずにマンチェスターを更新します。したがって、3番目のレコードはid1=になります。
どうすればこれを行うことができますか?私は途方に暮れています。
ありがとう。
編集
少し更新します。SQLbulkCopyを使用する前に、レコードを管理およびマージします。何が成功し、何が失敗したかのリストを取得することは可能ですか...それともALLの場合ですか、それとも何もありませんか?SQLbulkCopyに代わるものは他にないと思いますが、更新を行う以外にありませんか?
すべてを挿入できることが理想的であり、失敗したものは一時テーブルに挿入されます...したがって、失敗したテーブルにあるものを修正することだけを心配する必要があります。
vb.net - SQLBulkCopy が機能しない
これは、sqlbulkcopy クラスを使用する最初の試みです。実行しても何も起こらず、エラーも発生しません。私を助けてください。
これが私のコードです:-
.net - SqlBulkCopy を使用して、既定以外のデータベース スキーマのテーブルにデータを挿入するにはどうすればよいですか?
Staging
usingという名前のスキーマのテーブルにデータを挿入する必要がありますSqlBulkCopy
。
DestinationTableName
API では、プロパティを使用してターゲット テーブル名を設定することしかできないようです。
どうすればこれを達成できますか? 出来ますか?
.net - 照合順序が異なる SqlBulkCopy
ある DB から別の DB にデータを移行する必要があります。SqlBulkCopy を使用することを選択しましたが、ソース データベースの照合順序が宛先データベースと異なるため、問題が発生しました。例外があります。
SQLクエリでCOLLATEステートメントを直接使用せずにこの問題を解決する方法を教えてもらえますか? ソース データベースのすべての列の照合順序を変更する簡単な方法はありますか?
sql-server - SqlBulkCopy が遅く、ネットワーク速度をフルに活用していない
この数週間、データベースをコピーできる汎用スクリプトを作成してきました。目標は、サーバー上の任意のデータベースを指定して、それを別の場所にコピーできるようにすることです。指定されたコンテンツのみをコピーする必要があります。コピーされる正確なコンテンツは、構成ファイルで指定されます。このスクリプトは、約 10 の異なるデータベースで使用され、毎週実行されます。そして最終的に、500GB もの大きなデータベースの約 3% から 20% しかコピーしていません。これを実現するために SMO アセンブリを使用しています。SMO を使用するのはこれが初めてで、スキーマ オブジェクト、ファイル グループなどをコピーする一般的な方法を作成するのに時間がかかりました。(実際には、いくつかの悪いストアド プロシージャを見つけるのに役立ちました)。
全体的に、パフォーマンスが不足している(そして時々タイムアウトする)作業スクリプトがあり、皆さんが助けてくれることを望んでいました。WriteToServer コマンドを実行して大量のデータ (> 6GB) をコピーすると、1 時間のタイムアウト期間に達します。テーブル データをコピーするためのコア コードを次に示します。スクリプトは PowerShell で記述されています。
ソース データベースとターゲット データベースは別のサーバーにあるため、ネットワーク速度も追跡しました。ネットワーク使用率が 1% を超えることはありませんでした。これは私にとって非常に驚きでした。しかし、サーバー間でいくつかの大きなファイルを転送すると、ネットワーク使用率が最大 10% に跳ね上がります。$bulkData.BatchSize を 5000 に設定しようとしましたが、実際には何も変わりませんでした。BulkCopyTimeout をさらに大きくすると、タイムアウトだけが解決されます。ネットワークが十分に活用されていない理由を知りたいです。
他の誰かがこの問題を抱えていましたか?ネットワーキングまたは一括コピーに関する提案は大歓迎です。さらに情報が必要な場合はお知らせください。
ありがとう。
アップデート
SqlBulkCopy のパフォーマンスを向上させるいくつかのオプションを微調整しました。たとえば、トランザクション ログをシンプルに設定したり、デフォルトの行ロックの代わりに SqlBulkCopy にテーブル ロックを提供したりします。また、一部のテーブルは、特定のバッチ サイズに対して最適化されています。全体として、コピーの所要時間は約 15% 短縮されました。そして、各データベースのコピーを異なるサーバーで同時に実行します。しかし、データベースの 1 つをコピーするときに、まだタイムアウトの問題があります。
大規模なデータベースの 1 つをコピーすると、次の例外が一貫して発生するテーブルがあります。
BulkCopyTimeout の近くにないテーブルのコピーを開始してから約 16 分後にスローされます。最後にテーブルが完全にコピーされるという例外が発生しますが。また、そのテーブルを切り捨てて、そのテーブルに対してのみプロセスを再起動すると、テーブルは問題なくコピーされます。しかし、そのデータベース全体をコピーするプロセスを実行すると、その 1 つのテーブルに対して常に失敗します。
その障害のあるテーブルをコピーする前に、プロセス全体を実行して接続をリセットしようとしましたが、それでもエラーが発生しました。私の SqlBulkCopy と Reader は、各テーブルの後に閉じられます。毎回その時点でスクリプトが失敗する原因として他に何が考えられるかについて何か提案はありますか?
ターゲット DB にこのテーブルのインデックスが存在しません。