問題タブ [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-server-2008 - update t-sql 内に insert t-sql を入れ子にすることはできますか?
更新ステートメント内に挿入ステートメントをネストすることは可能ですか?
背景:
merge
この句を初めて使用して、一部のデータを変換しています。つまり、多くの列を持つ単一のソース テーブルがありますが、より適切な言葉がない場合は、より構造化されたモデル/スキーマに変換する必要があります。モデルのそれに似ていBI
ます。また、BI モデリングの経験もありません (読み始めてから 1 か月も経っていません)。どんな助けでも大歓迎です。
支援に必要なその他の情報があれば喜んで提供します。
エラー:
メッセージ 156、レベル 15、状態 1、行 47
キーワード「select」付近の構文が正しくありません。メッセージ 102、レベル 15、状態 1、行 48
')' 付近の構文が正しくありません。
これらは、tertiary.WEBADDRESS行に挿入しようとした時点でスローされます。
コード:
sql - マージによる更新
プロシージャの作成中に設計上の問題が発生しました。
同じ行の他の列のデータを使用して、テーブルのすべての行を更新する必要があるとします。table1
3 つの列がA
ありB
、C
すべての行を として更新する必要があるとしますC=A+B
。だから私は使用することができます:
しかし、私は以下のようなものを使用してこれを行う必要があります:
「クエリ」と「条件」を操作してこれを行う方法はありますか?
sql - ルックアップ テーブルの値を使用して列を更新する
テーブル製品に製品のリストがあります。これには、500 万を超えるレコードが含まれる場合があります。
prod_code と prod_region は null 許容ではありません。
別のルックアップ テーブル product_type から選択して、このテーブルの prod_type を更新する必要があります。
このテーブルでは、prod_region は null にすることができます。null の場合は Anything と解釈する必要があります。
したがって、更新された製品テーブルは次のようになります。
目的の出力の説明。
- prod_code = 1001 の場合、product_type に 2 つの整数があります。特定の prod_region 'R1' の場合は prod_type = 3、残りの地域の場合は prod_type = 1 です。したがって、products の最初の 2 つのレコードは、それぞれ 1 と 3 を取得する必要があります。
- prod_code 1002、1003 の場合、product_type テーブルに prod_region が指定されていません。したがって、prod_region に関係なく、3 番目と 4 番目のレコードには prod_type = 2 が割り当てられます。
次のマージ ステートメントはORA-30926: unable to get a stable set of rows in the source tables
、Oracle またはFailure 7547 Target row updated by multiple source rows.
Teradata が原因で失敗します。
標準 SQL または Teradata 固有の回答を探しています。
sql - ページング 一括データをテーブルに挿入する
ばかげた質問かもしれませんが、挿入を分割/ページングして、他の操作が同じテーブルを更新できるようにする方法です。
2 つのストアド プロシージャがあり、1 つはバルク データを挿入します
ストアド プロシージャInsertIntoMyTable
:
の主キーMyTable
は(Column1, Column2)
またMERGE
、同じテーブルに対する操作もありますMyTable
が、別のソースから、主に更新 (列 3) だけでなく、データを に挿入することもできますMyTable
。
問題は、1,000 万レコードの挿入にMyTable
時間がかかる場合、実行するストアド プロシージャが終了MERGE
するまで待たなければならないことInsertIntoMyTable
です。
これを解決しようとすると、ページ分割された
ただし、操作が終了するまでテーブルは引き続きロックされます。
注: 実行はトランザクションではありません。
sql - テーブルを結合して結果を取得する
これは、更新する必要があるテーブルです。
更新されたユーザーの新しい値を含む一時テーブルがあります。
TEMP TABLE の新しい値を反映するように TABLE A を更新する方法を知りたいです。期待される結果は次のようになります。
私が持っている2つのアイデアは次のとおりです。
- 削除してから挿入します。左結合を使用して存在しなくなった値を特定し、それらを削除します。次に、右結合を使用して新しい値を決定し、それらを挿入します。
- MERGEを使用できるかもしれませんが、実装方法はよくわかります。
テスト環境
編集:次のソリューションは、テーブル A から ID (1,2,3,4) を削除しますが、(2,3,4) だけを削除したいです。これは、ID 1 が既に TABLE A に存在し、削除して再度挿入する必要がないためです。
解決策はありますが、かなり面倒です。それを改善する方法はありますか?