0

私は SQL Server 2012 を使用しており、いくつかの処理を行うストア プロシージャをデバッグしていますINSERT INTO #temporal table SELECT

コマンドで選択されたデータを表示する方法はありますか (挿入のサブクエリ?) 挿入されたデータおよび/または挿入によって変更が加えられたテンポラル テーブルを表示する方法はありますか?

1行ずつではなく、合計行であるかどうかは関係ありません

更新

AT コンプライアンスおよび企業ポリシーの要件により、テストの過程で変更を行うことができ、これは別のチームによって管理される可能性があります。スクリプトの変更を回避する方法はありますか?

主なアイデアは、AT ユーザーが自分のワークデスクトップで出力をチェックインし、環境や製品に変更を加えることなく、コピーして貼り付けるというものです。

よろしくお願いいたします。

4

3 に答える 3

2

これを行うことができない理由はありますSELECT * FROM #temporalか? (そして、SQL Server Management Studio でデバッグし、アプリケーションが渡すのと同じパラメーターを渡します)。

これは手早く汚い方法ですが、他の (よりクリーン/より良い) 答えよりもこの方法を使用したい理由の 1 つは、ここでもう少し制御できることです。また、一時テーブルに複数の挿入がある場合 (そうでないことを願っています)、単一の選択を行うだけで、挿入されたすべての行を一度に表示できます。

私はおそらく他の方法でそれを行うでしょう(今ではそれについて知っています)。

于 2013-03-15T13:58:14.143 に答える
2

あなたの質問を正しく理解できたら、次のOUTPUT節を見てください。

INSERT、UPDATE、DELETE、または MERGE ステートメントの影響を受ける各行からの情報、またはそれに基づく式を返します。これらの結果は、確認メッセージ、アーカイブ、およびその他のアプリケーション要件などで使用するために、処理アプリケーションに返すことができます。


例えば:

INSERT INTO #temporaltable 
OUTPUT inserted.*
SELECT *
FROM ...

他のテーブルから選択された、テーブルINSERTに挿入されたステートメントのすべての行を提供します。temporal

于 2013-03-15T14:00:53.300 に答える
1

スクリプトを変更せずにこれを行う方法はありません。ただし、将来的には、必要なデータ テストを実行できるようにするデバッグ パラメータを使用せずに、複雑なストアド プロシージャまたはスクリプトを記述しないでください。デフォルト値が 0 の最後のパラメーターにすると、proc を呼び出す現在のコードを変更する必要さえありません。

次に、中間結果を確認する必要があるすべての場所に、以下のようなステートメントを追加できます。さらにデバッグモードでは、バグがデータに影響を与えないように、常にトランザクションをロールバックできます。

IF @debug = 1
BEGIN
   SELECT * FROM #temp
END
于 2013-03-15T14:22:56.083 に答える