問題タブ [dynamic-sql]

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 投票する
3 に答える
2360 参照

sql - 列の Oracle 動的 SQL

レポート対象のデータに基づいてテーブルを作成する必要があるストアド プロシージャを作成しています。

この状況では、ある日付範囲の特定のコードについて、1 日あたり 3 つの値を取得します。

このストアド プロシージャの特定の実行で、日付範囲のコード値 X、Y、および Z があるとします。

したがって、日付範囲の各日について、コード x、y、および z の 3 つのレコードがあります。

最終的なテーブルでは、これを行から列に変換する必要があります。通常はデコード関数を使用しますが、ここでは、戻ってくるデータに基づいて最終テーブルを動的に作成したいと考えています。

この場合、範囲内の日ごとに 1 つのレコードがあり、さらに 9 つの列 (val_1_X、val_2_x、val_3_x、val_1_y など) があります。

これを動的に設定して、新しい「コード」が導入されたときにストアド プロシージャを再度開く必要がないようにし、レポートの各インスタンスで、そのインスタンスで「コード」のみが返されるようにします。レポートは最終表に含まれています。

これは動的SQLで可能ですか? 私は Oracle バージョン 10g を使用しています。

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

oracle - sqlplus で Oracle 動的 SQL をデバッグするにはどうすればよいですか?

EXECUTE IMMEDIATEクエリの実行に使用する PL/SQL ステートメントがあります。ただし、実行中のクエリのテキストを取得する方法すらわかりません。dbms_outputクエリが 255 文字を超えているため使用できません。に渡された文字列を sqlplus にエコーさせる方法はありますEXECUTE IMMEDIATEか?

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

oracle - PL/SQL - where句のオプション条件 - 動的SQLなし?

すべての条件が必要なわけではないクエリがあります。すべての条件を使用した場合の例を次に示します。

とマークされ--this is variableた部分は、まあ、変化する部分です! 条件が指定されていない場合、デフォルト値はありません。たとえば、入力で q.type に「*」が指定されている場合 (ただし、他のすべては同じまま)、クエリは type のすべてに一致し、次のように実行されます。

動的 sql を使用してこのクエリをオンザフライで作成できることはわかっていますが、これによりどのようなパフォーマンスの問題が発生する可能性があるのか​​、またこれを行うためのより良い方法があるかどうか疑問に思っています。

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

sql-server - データに何も存在しない場合に null 値を返す SQL Server 動的ピボット

次のような3 つのテーブル ( tblPreferencetblCustomertblCustomerPreference) があります。

このデータのピボットを作成しているので、次のストアド プロシージャを使用してすべてが 1 つの行になり、常にすべての設定が引き戻され、顧客固有の値が見つかった場合はそれが返され、それ以外の場合はデフォルト値が返されます。

私が直面している問題は、CustomerID 1 または 2 を照会すると、期待どおりにすべての値が入力されて、すべてが期待どおりに返されることです。しかし、CustomerID 3 を照会するとNULL、他の顧客用に入力された PreferenceID に対して が返されます。式なしでクエリを実行するとPIVOT、期待どおりに入力されたすべての設定が返されます。データが忍び寄るのをピボットしたときだけNULLです。簡単なことを見逃していることを願っていますが、エラーは表示されません。

0 投票する
3 に答える
21121 参照

tsql - それらを連結するのではなく、Dynamic Sqlに変数を追加する方法は?

@StartRowIndex + @MaximumRows を追加し、そこから 1 を減算する次の動的 SQL ステートメントがあります。ステートメントのどこに一重引用符を入れるかがわかりません。ここにあります:

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

sql - SQL_VARIANTデータ型を使用した動的SQL問題のパラメーター化

私は巨大な動的SQLステートメントをリファクタリングしてきましたが、障害にぶつかった可能性があると思います。目標はそれをパラメータ化することでした。SQLServer2005を使用しています。

@i更新する必要のある列を決定するint変数( )があります。これが私がやってきたことです:

次に、ステートメントを実行しようとします。

これにより、次のようになります。

データ型sql_variantからvarcharへの暗黙的な変換は許可されていません。CONVERT関数を使用して、このクエリを実行します。

@updateValueにテキストとして保存した正しいタイプになんらかの方法でキャストできれば、これを回避できます@updateClauseDataType。の値を調べる巨大なifステートメントがなくてもこれを実行できる方法はあります@updateClauseDataTypeか?

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

sql - 動的 SQL で完全修飾テーブル名を使用できません

サーバー名のリストを反復処理し、いくつかの動的 SQL を実行して、複数のリモート サーバー上のテーブルを更新しようとしています。下記参照。

次の出力が生成されます。

現在、SomeServer はリンク サーバーです。印刷された SQL ステートメントを実行すると、正常に動作します。また、エラー メッセージでは、リモート サーバーが「SomeServer」ではなく「UPDATE SomeServer」であると見なされることに注意してください。

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

sql - リンクサーバー上で複数の動的ステートメントを一緒に実行する

次のように、リンク サーバー (SQL Server 2005) で 3 つの動的 SQL ステートメントを同期的に実行する必要があります。

これをテストするために、それ自体にリンクするリンク サーバーのセットアップがあります。

このローカルを (を削除して@server_name) 実行すると、SQL プロファイラーを使用して、1 つのステートメントとして問題なく実行されることがわかります。ただし、リンク サーバー経由で (@server_name変数を使用して) これを実行すると、SQL プロファイラーで、各ステートメントが個別に実行され、各ステートメントのsp_reset_connection後に実行されることがわかります。

トレースは次のようになります。

これは私に問題を引き起こしています。sp_reset_connectionステートメント間で呼び出さないように SQL Server に指定できる理由はありますか?

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

sql - SQL Server / TSQL で動的 SQL をロールバックできますか

トランザクションで動的 SQL を実行し、EXEC を使用してロールバックできますか?

これをトランザクションに入れ、exec ステートメントの後に @@error を使用してロールバックを行います。

例えば。コード

n 個の動的 SQL ステートメントがあり、n/2 でエラーが発生した場合、最初の 1 個から ((n/2) - 1) 個のステートメントがロールバックされます。


最初の回答に関する質問

@@Error でエラーが検出されない可能性が最も高い エラーが検出されない可能性があるということは、トランザクションがコミットされる可能性があることを意味します。目的に反するもの

SQL Server 2005+ での TRY/CATCH はい SQL Server 2005 を使用していますが、以前に Try Catch を使用したことがありません。

または、ネットでさらにいくつかの例を見ました

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

sql - ストアドプロシージャの場合について

次のクエリがあります。

ここでの問題は、@WhrStr の 1 番目と 2 番目の case ステートメントで結果を取得したいことです。 2 番目から 1 番目に追加します。