問題タブ [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.

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

iphone - SQLite データベースからのコア データ「Upsert」

私は現在、さまざまなデータを変更して永続化する機能を必要とするアプリを作成しています。この目的のために Core Data を使用することにしました。ユーザーがアプリケーションを初めて開いたとき、SQLite データベースから大量のデータをインポートする必要があります。このデータは多対多の関係で構成されています。

このすべてのデータをコード データ ストアに挿入する最善の方法を見つけたいと考えています。現在、アプリケーションの残りの部分がアクティブなままである間に NSOperation を使用してインポートを行っているため、ユーザーは他のことを行うことができますが、アプリ全体にすぐにアクセスできるように、できるだけ早くインポートを実行したいと考えています。 .

私が現在使用している方法は、NSFetchRequest を使用して、データ ストア内の関連エンティティを見つけようとすることです。エンティティが存在する場合は、それを関係として追加するだけです。エンティティが存在しない場合は、新しいエンティティを作成し、関係として追加します。これは機能しますが、おそらく最適にはほど遠いと思います。

私が今使っているコード:

関係を追加する方法:

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

sql-server-2005 - MS SSISでブロックの一括挿入が更新されるのはなぜですか?

SSISパッケージを次のように設定しています。

SSISフローhttp://www.invativa.se/Images/Support/support.PNG

New Rowsフローのみを実行すると、Bulk Insertは問題なく終了しますが、Live Rowsフローを接続するとすぐに、パッケージが無期限に停止します。アクティビティモニターを確認すると、[新しい行の挿入]タスクによってブロックされた[新しいテーブル行の更新]タスクのストールが発生します。

バルクインサートが終了しないのはなぜですか?パッケージを実行させるにはどうすればよいですか?

NB:これが最適ではないかもしれないことを私はよく知っています、しかし私はそれが述べられているように質問への答えを得ることに本当に興味があります。ありがとう!

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

java - HibernateとMySQLでアップサートを処理するエレガントな方法

私は現在、HibernateとMySQLの上にあるバッチインポート機能に取り組んでいます。私の目標は、いくつかのテーブルにアップサート機能を持たせることです。キーで行が存在するかどうかを確認し、正しいメソッドに分岐するためのコードをたくさん書いていることに気づきました。より良い方法があるのではないかと思っていました。つまり、SQL-Server SSISに付属しているツールに類似していますが、HibernateとMySQL用です。HibernateやMySQLでバルクアップサートを処理するためにどのツールまたはエレガントなソリューションを使用しましたか?

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

sqlite - SQLite の「INSERT OR REPLACE INTO」と「UPDATE ... WHERE」

以前に SQL で使用されている構文を見たことがなく、INSERT OR REPLACE INTO names (id, name) VALUES (1, "John")なぜ SQL よりも優れているのか疑問に思っていましUPDATE names SET name = "John" WHERE id = 1た。どちらか一方を使用する正当な理由はありますか。この構文は SQLite に固有のものですか?

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

sql - Oracle MERGE does not INSERT

I have this simple example I can't seems to get working :

If a 'AAA' record exists in the table, it is updated successfully.

But if does not exists, it is not inserted :

Any clue on what I am doing wrong ?

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

sql-server - SQL Server での単一行の MERGE / アップサートの構文

テーブルで単一行の挿入/更新を実行しようとしていますが、すべての例はセット用です。

誰でも私の構文を修正できますか:

marc_s ごとの解決策は、単一の行をサブクエリに変換することです。これにより、MERGE コマンドは単一の行のアップサートを意図したものではないと思われます。

0 投票する
5 に答える
14910 参照

sql-server - SQL Server 2005 のアトミック UPSERT

SQL Server 2005 でアトミックな "UPSERT" (存在する場合は UPDATE、存在しない場合は INSERT) を実行するための正しいパターンは何ですか?

SO には、次の 2 つの部分からなるパターンを持つ多くのコードが表示されます (たとえば、「行が存在するかどうかを確認し、そうでない場合は挿入する」を参照)。

また

ここで、<条件> は自然キーの評価になります。上記のアプローチはどれも、並行性をうまく処理していないようです。同じ自然キーを持つ 2 つの行を持つことができない場合、上記のすべてが競合状態のシナリオで同じ自然キーを持つ行を挿入するリスクがあるようです。

私は次のアプローチを使用していますが、人々の回答のどこにも見られないことに驚いているので、何が問題なのか疑問に思っています:

ここで言及されている競合状態は、以前のコードのものとは異なることに注意してください。以前のコードでは、問題はファントム読み取り (UPDATE/IF の間、または別のセッションによって SELECT/INSERT の間に挿入される行) でした。上記のコードでは、競合状態は DELETE に関係しています。(WHERE NOT EXISTS) が実行された後、INSERT が実行される前に、一致する行が別のセッションによって削除される可能性はありますか? WHERE NOT EXISTS が UPDATE と関連して何かをロックする場所は明確ではありません。

これはアトミックですか?これが SQL Server ドキュメントのどこに記載されているかわかりません。

編集: これはトランザクションで実行できることを認識していますが、ファントム読み取りの問題を回避するには、トランザクションレベルを SERIALIZABLE に設定する必要があると思いますか? 確かに、そのような一般的な問題にはやり過ぎですか?

0 投票する
5 に答える
104695 参照

sql - SQLite INSERT-ON DUPLICATE KEY UPDATE(UPSERT)

MySQLには次のようなものがあります:

この機能がSQLiteに存在しないことを知っている限り、私が知りたいのは、2つのクエリを実行せずに同じ効果を達成する方法があるかどうかです。また、これが不可能な場合は、何を好みますか。

  1. SELECT +(INSERTまたはUPDATE)または
  2. UPDATE(+ UPDATEが失敗した場合はINSERT )
0 投票する
2 に答える
6737 参照

mysql - 重複キー更新 + サブクエリの Mysql

この質問からの回答を使用: MySQL INSERT - SELECT query for tables with millions records

group by で作業して join.. を編集するには、これが必要です。

値を更新できないようです。old_table.value を指定すると、フィールド リストで定義されていないというエラーが発生します。

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

sql - Oracle - 変更されていない値に対して更新が実行されない UPSERT

現在、次の update または insert Oracle ステートメントを使用しています。

これは、データが指定されたパラメーター値と同じである場合に更新ステートメントがダミーの更新を実行することを除いて、正常に実行されます。通常の状況ではダミーの更新は気にしませんが、テーブルのトリガーを使用して更新されたレコードをキャプチャし、このステートメントを多くのレコードに対して頻繁に実行することは、単にトリガーと同期システム。

次の IF-EXISTS チェック コードを使用せずに更新ステートメントがレコードを更新しないように、このコードを再定式化する簡単な方法はありますか?


MERGE INTO 文も使ってみたのですが、値が変更されていない場合の更新では機能しません (更新は何も変更せずに挿入を実行しますが、PK 違反が発生します)。

完全な MERGE INTO サンプル:

Oracle が UPDATE...IF SQL%ROWCOUNT=0 THEN INSERT... を MERGE INTO 句に内部的に使用しているように見えますか? 2 番目の MERGE INTO ステートメントは失敗します。update は何も更新せず、INSERT が実行され、値が変更されなかっただけで行が既に存在するため、PK 違反が発生するためです。