SQLServerストアドプロシージャのクエリへの変換

Novice_Developer

ストアドプロシージャをSQLクエリに変換したい。

簡単な形式のストアドプロシージャは次のとおりです。

SELECT
    table1.* 
INTO 
    #raw_data
FROM 
    table_1 WITH (NOLOCK)
WHERE 
    (a lot of conditions and filtering follows)

SELECT
    xyz,
    pqr,
    (SELECT (something)
     FROM #raw_data aa
     WHERE aa.id1 = a.id1
       AND aa.id2 = a.id2
       ...)
INTO 
    #temp_data
FROM 
    #raw_data a
JOIN 
    table_2 b WITH (NOLOCK) ON a.xid = b.xid

このストアドプロシージャをSQLクエリに変換するに#raw_dataは、2番目のSELECTステートメントのすべてを次のように置き換えることができますか?

SELECT table1.*
FROM table_1 WITH (NOLOCK)
WHERE (a lot of conditions and filtering follows)

もっと良い方法があるかどうか知りたいのですが。

ダグプ

だからあなたはそれを...

SELECT xyz
, pqr
, (
    SELECT (something)
    FROM (
    SELECT table_1.*
        FROM table_1 WITH (NOLOCK)
        WHERE (a lot of conditions and filtering follows)
    ) aa
    WHERE aa.id1 = a.id1
    AND aa.id2 = a.id2
    ...
)

INTO #temp_data

FROM (
    SELECT table_1.*
    FROM table_1 WITH (NOLOCK)
    WHERE (a lot of conditions and filtering follows)
  ) a
  inner JOIN table_2 b WITH (NOLOCK) ON a.xid = b.xid

しかし、あなたは続けるべきです。この場合、相関サブクエリは必要ありません。付加価値はないようです。クエリがより複雑になります。また、サブクエリは外部クエリのすべての行に対して1回実行する必要があるため、速度が低下します。データセットをまとめて結合するSQLServerの機能を利用するには...

SELECT xyz
, pqr
, aa.something

INTO #temp_data

FROM (
    SELECT table_1.*
    FROM table_1 WITH (NOLOCK)
    WHERE (a lot of conditions and filtering follows)
  ) a
  inner join (
    SELECT table_1.*
    FROM table_1 WITH (NOLOCK)
    WHERE (a lot of conditions and filtering follows)
  ) aa on aa.id1 = a.id1
      and aa.id2 = a.id2
      ...
  inner JOIN table_2 b WITH (NOLOCK) ON a.xid = b.xid

コードのように、結合の両側で同じ列を使用してtable_1をtable_1に常に結合していると仮定すると、さらに単純化できる可能性があります。ここでは注意してください。xidは一意であるか、aとの間の結合に含まれていると思いますaaそうでない場合は、ここで停止することをお勧めします。

したがって、さらに単純化できる場合、次のステップは...

SELECT xyz
, pqr
, a.something

INTO #temp_data

FROM (
    SELECT table_1.*
    FROM table_1 WITH (NOLOCK)
    WHERE (a lot of conditions and filtering follows)
  ) a
  inner JOIN table_2 b WITH (NOLOCK) ON a.xid = b.xid

...そして次のように簡略化できます...

SELECT xyz
, pqr
, a.something

INTO #temp_data

FROM table_1 a WITH (NOLOCK)
  inner JOIN table_2 b WITH (NOLOCK) ON a.xid = b.xid

WHERE (a lot of conditions and filtering follows)

あなたが共有しなかったよりもかなり複雑なものがあるようです(不確実性の3つの点)。

WHERE aa.id1 = a.id1
  AND aa.id2 = a.id2
  ...

あなたのマイレージは異なる場合があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

SQLServerストアドプロシージャでの10進数から2進数への変換の使用

ストアドプロシージャパラメータに基づくSQLServerクエリの変更

SQLServerストアドプロシージャへのPythonスクリプトのインポート

MS-SQLServerストアドプロシージャをMySQLクエリに変換します

postgresストアドプロシージャの変数へのクエリ出力の割り当て

SQLクエリのnvarcharからデータ型intへの変換でストアドプロシージャでエラーが発生しました

バックエンド用のSQLServerのストアドプロシージャ

ストアドプロシージャエラー:「データ型nvarcharからuniqueidentifierへの変換エラー」

SQLServerストアドプロシージャの更新エラー

SQLServerストアドプロシージャのエラー

この大きなクエリをストアドプロシージャに変換する方法

adDBTimeStamp-SQLServerストアドプロシージャへのVBAへのアクセス

SQLServerストアドプロシージャを使用したWCFRESTリクエストデータの保存

SQLServerのストアドプロシージャでパラメータ選択クエリを渡したい

SQLServerストアドプロシージャは複数のテーブルをクエリします

ストアドプロシージャでのOracleクエリ

SQLServerストアドプロシージャの変数への@@ rowcountの割り当て

ストアドプロシージャのデータ型変換エラー

SQLクエリ(ストアドプロシージャ)からC#クラス構造へのマップ

ストアドプロシージャの値の変換

SQLServer-ストアドプロシージャの実行後のエラー

SQLServerストアドプロシージャの構文エラーの値

ストアドプロシージャの変換例外

SQLServerストアドプロシージャの結果で日付を文字列に変換する

SQLServerのストアドプロシージャでvarchar値をintに変換できません

SQLServerクエリプランキャッシュとストアドプロシージャのプランの再利用

ストアドプロシージャでのクエリの結果としてのSQLセット変数

Powershell SQLServerストアドプロシージャのバックアップ

ストアドプロシージャへのリンクを更新する

TOP 一覧

  1. 1

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  2. 2

    Ansibleで複数行のシェルスクリプトを実行する方法

  3. 3

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  4. 4

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  5. 5

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  6. 6

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  7. 7

    パンダは異なる名前の列に追加します

  8. 8

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  9. 9

    グラフ(.PNG)ファイルをエクスポートするZabbix

  10. 10

    Chromeウェブアプリのウェブビューの高さの問題

  11. 11

    ラベルとエントリがpythontkinterに表示されないのはなぜですか?

  12. 12

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  13. 13

    mutate_allとifelseを組み合わせるにはどうすればよいですか

  14. 14

    Reactでclsxを使用する方法

  15. 15

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

  16. 16

    テキストフィールドの値に基づいて UIslider を移動します

  17. 17

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  18. 18

    MLでのデータ前処理の背後にある直感

  19. 19

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  20. 20

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  21. 21

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

ホットタグ

アーカイブ