問題タブ [upsert]
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.
c# - SQL Server Compact Edition で Insert OR Update (upsert) を実行する
データ アクセスに sqlserver コンパクト エディションとエンティティ フレームワークを使用している c# プロジェクトがあります。5000以上の大量の行をデータベースに挿入または更新する必要があるため、キーが存在する場合は、挿入しない場合はレコードを更新します。コンパクト エディションと EF を使用してこれを実行するには、恐ろしいパフォーマンスが必要です。つまり、コア i7 コンピューターで 2 分以上かかります。レコードを検索して、存在するかどうかを確認し、存在しない場合は挿入するか、存在する場合は更新しようとしましたが、検索はそのキラーです。検索クエリをコンパイルしてみましたが、わずかな改善しか得られませんでした。私が試したもう1つのことは、try catchにレコードを挿入し、更新に失敗した場合ですが、パフォーマンスキラーである最後とは対照的に、すべてのレコードで変更を保存して例外を取得することを強制します. 明らかに私はできます」コンパクト版なのでストアドプロシージャを使用しません。また、データベース上で何らかの方法で t-sql を直接実行することだけを見てきましたが、コンパクトにプロセスステートメントがないため、それが除外されているようです。私は世界中を探し回り、アイデアを探し出しました。展開の利点と、ユーザーがデータベースを掘り下げるのを防ぐ機能を過剰に表現できる場合は、コンパクトを使用したかったのです。どんな提案もいただければ幸いです。
ありがとう
mysql - 行が見つからない場合は行を挿入し、見つかった場合は更新するMySQLの「適切な」方法
非常に頻繁に、1対1の関係で、行を保存してそのユーザーに関連付けたいユーザーの1人に対してクエリを実行したいと思います。たとえば、(これは単なる任意の例です)、ユーザーの車を追跡するテーブルと、車に関する情報があるとします。各ユーザーは、0台または1台の車を持つことができます。ユーザーが車を持っていない場合、そのユーザーのテーブルにはエントリがありません。
車のテーブル(ここでも、単なる例):id、user_id、car_make、car_model
したがって、このテーブルを更新すると、常に次のようなことを行うことになります(擬似コード)。
これを「原子的に」機能する1つのエレガントなステートメントにするにはどうすればよいですか?別のプロセスで、SELECTステートメントとUPDATEステートメントの間で行が削除された場合はどうなりますか?INSERTステートメントを実行する必要がある場所でUPDATEステートメントが失敗します。そして、同じことを達成するために、2つの類似した(しかし異なる)ステートメントを実行する必要があるように感じます!必要なのは、特に要件を満たす1行だけが必要な場合に、必要なデータがテーブルに存在することを保証するステートメントです。たとえば、次のようになります(もちろん、これは完全に構成されています)。
そうすれば、user_idが5の場合は更新され、そうでない場合は挿入されます。また、要件を変更した場合、たとえば、各ユーザーが特定のcar_makeの車を0台または1台持つことができるとすると、さらに次のように指定できます。
私の質問が理にかなっていることを願っています!頻繁に発生するこの基本的なinsert-if-not-foundまたはupdate-if-found操作をどのように改善できますか?助けてくれてありがとう!
sql - 条件付き Upsert ストアド プロシージャを実装する方法は?
基本的な UPSERT 機能を実装しようとしていますが、ひねりがあります。既存の行を実際に更新したくない場合があります。
基本的に、私はいくつかのデータを異なるリポジトリ間で同期しようとしていますが、Upsert 関数がその方法のように思えました。そのため、この質問に対する Sam Saffron の回答、およびその他の調査と読書に主に基づいて、次のストアド プロシージャを思いつきました。
(注: MS SQL Server 2005 を使用しているため、MERGE ステートメントはオプションではありません)
基本的な Upsert についてはこれで問題ありませんが、別の列の値を条件として実際の更新を行いたいと考えています。これは、Upsert プロシージャによってそれ以上更新されないように、行を「ロック」するものと考えてください。UPDATE ステートメントを次のように変更できます。
ただし、その後の Insert は、既に存在するが「ロック」されているために更新されていない行を挿入しようとすると、(ContentID フィールドの) 一意の制約違反で失敗します。
これは、従来の Upsert がなくなったことを意味するのでしょうか。つまり、行を更新または挿入できるかどうかを判断するために、毎回行を選択する必要があるのでしょうか? 私が本当に求めているのは、手順が安全に実行されるように、トランザクション分離レベルを正しく設定することです。
postgresql - 挿入、PostgreSQL の重複更新時?
数か月前、スタック オーバーフローに関する回答から、次の構文を使用して MySQL で一度に複数の更新を実行する方法を学びました。
現在、PostgreSQL に切り替えましたが、明らかにこれは正しくありません。すべての正しいテーブルを参照しているので、異なるキーワードが使用されていることが問題だと思いますが、PostgreSQL ドキュメントのどこでこれがカバーされているかわかりません。
明確にするために、いくつかのものを挿入し、それらが既に存在する場合はそれらを更新したいと思います。
sql-server - SSIS の UPSERT
SQL Server 2008 で実行する SSIS パッケージを作成しています。SSIS で UPSERT を実行するにはどうすればよいですか?
sql - MySQL で存在する場合は更新し、存在しない場合は挿入 (別名「アップサート」または「マージ」) するにはどうすればよいですか?
1 つの MySQL クエリを使用しINSERTて、行が存在しない場合、または存在する場合に簡単に行を取得する方法はありますか?UPDATE
.net - .net sqladapter によるアップサート
レコードを取得せずにこの upsert 機能を実現する方法はありますか? SQL Server 2005 を使用しています。select ステートメントを実行せずに、sqladapter を使用してこれを行う方法があると聞きました。
私はこのプロセスをスピードアップしようとしています。助言がありますか?
乾杯。
sql - OraclePLS-00103エラー。既存のレコードをどのようにチェックし、その条件に基づいて更新または挿入しますか?
SELECTステートメントからレコードがテーブルに存在するかどうかを確認する必要があります。レコードが存在する場合は更新を行い、そうでない場合はテーブルにレコードを作成します。しようとしていますが、PLS-00103エラーが発生します。
これらは、DBVisaulzierでコードを実行したときに発生するエラーです。
以下は私のコードです:
sql - SQL Server 2005 で推奨されるマージ方法は何ですか?
行をテーブルにマージするために主にExists メソッドを使用していましたが、 Row Count メソッドへの切り替えを検討しています。しない理由はありますか?
Exists メソッド
RowCount メソッド
パフォーマンス
Row Count Methodは劇的に高速なようです。約 50k 行のテーブルでは、Exists Methodの 1/5 の時間でクロックインします。テストはあまり科学的ではありませんでしたが、保守的な +/- 15% でさえかなりのものでした。これが乗り換えたい一番の理由です。
ノート
例は、読みやすくするために意図的に単純化されています。それらは私の実際の状況を決して反映していません。
sql - レコードが存在する場合は、他の挿入を更新します
2つのSQLServer2008テーブル間でデータを移動しようとしています。レコードがTable1からの電子メールとともにTable2に存在する場合は、そのレコードをTable1からのデータで更新します。そうでない場合は、新しいレコードを挿入します。
表1には、いくつかの列があります。名、名前、メールアドレスなど。
Table1からの電子メールが存在する場合はTable2を更新するように、またはTable1からの電子メールがTable2に存在しない場合は新しい行を挿入するように、クエリを構成する方法がよくわかりません。
Googleでいくつか検索してみましたが、ほとんどのソリューションはストアドプロシージャを作成することで機能するようです。だから私は誰かがトリックを行うかもしれない適切なクエリを構築する方法を知っているのではないかと思いましたか?