問題タブ [sql-merge]
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.
sql - リモート (リンクされた) サーバー テーブルへの SQL MERGE
リンク サーバーのデータベース テーブルで SQL MERGE 関数を使用することはできますか? 最終的な目標は、リモート テーブルをローカル SQL サーバー テーブルと同期することです。オンラインでいくつかの調査を行いましたが、関連する情報は見つかりませんでした。可能であれば、ソース ステートメントとターゲット ステートメントをどのようにセットアップしますか?
sql-server - SQL Server 一括挿入/更新: ソースに重複するレコードが存在するかどうかを確認する
idProduct = id (1 対 1) で結合する次のテーブルがあります。
製品
- idProduct
- 説明
プロダクトキー
- ID
- プロダクトキー
製品の説明に基づいて製品の ProductKeys のキーを更新する、単一および一括の挿入と更新のために、Products テーブルにトリガーを作成する必要があります。
製品にキーがある場合は、キーを説明に更新し、そうでない場合は新しいキーを挿入します。
プロダクト キーは、製品ごとに一意である必要があります。
そのため、別の製品のキーが既に存在する場合は、説明に idProduct を追加してキーを作成します。
私の問題:
同じ説明で2つの異なる製品が挿入または更新されるシナリオを除いて、挿入と更新に対してトリガーが機能しています。このシナリオでは、生成されるキーは両方の製品で同じです。
何か案は?
MERGE ステートメントを使用したトリガーは次のとおりです。
sql - 結合を使用して更新すると、「MERGE ステートメントが同じ行を複数回 UPDATE または DELETE しようとしました。」がスローされます。
次のエラーをスローしている JOIN を含む UPDATE クエリがあります。
MERGE ステートメントが同じ行を複数回 UPDATE または DELETE しようとしました。これは、ターゲット行が複数のソース行と一致する場合に発生します。MERGE ステートメントは、ターゲット テーブルの同じ行を複数回 UPDATE/DELETE することはできません。ターゲット行が多くても 1 つのソース行と一致するように ON 句を調整するか、GROUP BY 句を使用してソース行をグループ化します。
これが私の更新ステートメントです:
製品は、SKU および idManufacturer による #priceupdates に参加します。
#priceupdates テーブルに重複や NULL はありません。
編集:
それを証明するために、次の 2 つのステートメントを実行しましたが、どちらも同じ量のレコードを返しました。
編集を終了
#priceupdates のデータに応じて、エラーがスローされる場合とスローされない場合がありますが、どのデータが問題の原因であるかを見つけるのに苦労しています。
では、重複があること以外に、このエラーを引き起こす可能性のある他の要因は何ですか?
どんな助けでも大歓迎です。
編集2:
テストデータはこちら。私が言ったように、どのデータが問題を引き起こしているのかを見つけることができないため、再現を提供することはできません。
アップデート!
犯人を見つけたと思います。priceupdates テーブルから特定のレコードを除外すると、うまくいきます! しかし、私はまだその記録の何が問題なのかわかりません。ここからどこへ行けばいいですか?注:そのレコードのみを含めると、更新も機能します。
mysql - SQL GROUP BY 使用時のマージ
mySQL DB 内の私のデータは次のようになります (ただし、この 4 人だけでなく、複数回登場している人物が多数いますが、資格と変更日が異なります
選択は次のようになります。
したがって、この選択を行い、person_id でグループ化すると、次のようになります。
個人IDでグループ化する可能性はありますか? person_id
通常、where SQLステートメントにはありません。
だから私は私の選択からすべての人が欲しいのですが、最後に変更された資格の結果だけが
必要です(問題が何であるかを理解できるように十分に説明したいと思います)
(もちろん、私の選択は、私が示したものよりもはるかに複雑です。これは、私が何をしているかを示すためのものです)
sql - MERGE 自己結合 SQL Server
SQL Server 2008 で MERGE コマンドを使用して、テーブルの行を挿入/更新しています。ただし、ターゲット テーブルとソース テーブルは同じです。そのため、行が存在するかどうかを確認し、同じテーブルで更新するか、挿入します。ただし、次のスクリプトを使用して挿入を行うことはできません。
何が問題なのか指摘していただけますか?
これを実行すると、0 行が影響を受けます。
sql-server - ストアド プロシージャは、SSIS から実行するとスキーマ バージョン変更エラーを返しますが、直接実行すると返されません
で手動で実行すると毎回正しく実行される SQL Server ストアド プロシージャがありますEXEC
が、SSIS パッケージの一部として実行すると、次のようなエラーで失敗します。
この手順はMERGE
、ビューのデータを SP と同じサーバー上の別のデータベースのテーブルにマージするステートメントです。
ビューは、リンク サーバーを参照しますOtherServer
。リンク サーバーで参照されているデータベースは削除され、夜間に再作成されます。
これまでのところ、私はこれらのことを試しました:
1) MERGE を実行する前に、ビューを削除して再作成します。
2) MERGE を含む SP を定義しますWITH RECOMPILE
。
EXEC()
3)事前にコンパイルされないようにMERGE ステートメントをラップします。
4) Bypass Prepare
SSIS の関連するステップで true に設定します。
編集:
ストアド プロシージャを含むサーバーは SQL Server 2008 を実行しています。リンク サーバーは 2008 R2 です。
postgresql - PostgreSQL で UPSERT (MERGE、INSERT ... ON DUPLICATE UPDATE) する方法は?
ここで非常によくある質問は、アップサートの実行方法です。これは、MySQL が呼び出すものでINSERT ... ON DUPLICATE UPDATE
あり、標準ではMERGE
操作の一部としてサポートされています。
PostgreSQL がそれを直接サポートしていない場合 (pg 9.5 より前)、どうすればよいでしょうか? 次の点を考慮してください。
(2, 'Joe')
ここで、タプル,を「アップサート」したいとします(3, 'Alan')
。したがって、新しいテーブルの内容は次のようになります。
について議論するとき、それは人々が話していることupsert
です。重要なことは、明示的なロックを使用するか、結果として生じる競合状態から防御することにより、同じテーブルで複数のトランザクションが動作している場合、どのアプローチも安全でなければならないということです。
このトピックは、 Insert、on duplicate update in PostgreSQL? で広く議論されています。、しかしそれはMySQL構文の代替に関するものであり、時間の経過とともに関連のない詳細がかなり増えています. 私は決定的な答えに取り組んでいます。
これらの手法は、「存在しない場合は挿入し、そうでない場合は何もしない」、つまり「重複キーを無視して挿入する」場合にも役立ちます。