2

私はMCTS 70-433「データベース設計」認定のために勉強しています.私が勉強しているテキストでは、セルフテストの1つにこの質問があります.

Get_NewProducts という名前のストアド プロシージャがあります。このストアド プロシージャの結果を Production.Product テーブルに挿入し、OUTPUT 句を使用して INSERTED.* 値を出力します。これを行う最善の方法は何ですか?

考えられる答えは 4 つあります。最初の 3 つの選択肢はすべて、「INSERT...OUTPUT...EXECUTE Get_NewProducts」ステートメントのバリエーションです。4 番目の選択肢である D は、「ストアド プロシージャをテーブル値関数として書き直す」という単純なものです。

Dが正解です。その理由はよくわかりません。テキストにはそれを説明するものは何もありません。誰にも洞察がありますか?

4

4 に答える 4

5

まあ、msdnから:

「OUTPUT句は、ローカルパーティションビュー、分散パーティションビュー、リモートテーブルを参照するDMLステートメント、またはexecute_statementを含むINSERTステートメントではサポートされていません。」

于 2009-09-29T23:31:16.490 に答える
1

これに対する私のひざまずく反応(数日前にもう一度ヒットしました)は次のとおりです。

  • ストアドプロシージャはネストすることができ、多くの場合ネストされます。手順AはBを呼び出し、BはCを呼び出し、以下同様に続きます。
  • INSERT ... EXECUTE ...ステートメントによって呼び出されるコード自体に、INSERT ...EXECUTE...ステートメントを含めたり参照したりすることはできません。挿入すると、このプロシージャを後のINSERT ...EXECUTE..に「埋め込む」ことはできません。

これは些細なことのように思えるかもしれませんが、一般的には、少なくともリファクタリングプロジェクト中にヒットするまではそうです。一度噛まれたら、二度恥ずかしがり屋。(そしてそれは何度も私を噛みました。)

スタイルや外観の理由もいくつかありますが、それらは表面的なものです。おそらく、再コンパイルまたはクエリ実行プランに関係しているなど、重大な技術的理由があります。もしそうなら、うまくいけば、他の誰かがそれらを投稿します。

于 2009-09-29T21:54:17.020 に答える
0

彼らの「正しい答え」が正しくない理由の 1 つは、TVF がエラーのチェックとレポートに問題を抱えていることです。

質問を考えると、Dは可能性すらないように見えるので、それは本当に奇妙な質問/回答です。

于 2009-09-29T22:16:53.630 に答える
0

「正しい」答えはわかりませんが、著者の考えでは、70-442 のような「データ アクセス」試験の 1 つとは対照的に、 70-433Database Development開発および設計指向の試験であると推測されます。設計段階では、既存のシステムの障害を見つけて、より良い解決策を提案できる必要があります。著者は、出力をテーブルに挿入する必要があるストアド プロシージャは、TVF として書き直したほうがよいと考えています。TVF が proc よりも優れているかどうかについて、短所と長所の両方を見つけることができます (最初に、exec ネストの長所、不適切なエラー処理の短所を挿入してください)。

私はこれらの試験のいくつかを自分で受けましたが、試験の準備資料と試験自体が、それらの主題に関する絶対的な究極のリファレンスであるとは限らないことがわかりました. 全体として、それらは正しくて価値がありますが、時々問題があり、少なくともいくつかの疑わしい推奨事項と、単なる間違った推奨事項さえ見つけました. そして、私が間違っているとわかったトピックについては、私が実際その主題に関する究極のリファレンスであり、私が設計した機能について私が書いたコードをカバーしていました...

私のアドバイスは、「期待される」答えの感触をつかみ、実際の試験中にそれに備えることです。あなたのフレア ポイントと私が見た回答を考えると、あなたはすでに試験レベルを超えているので、フープを通過して試験バッジを獲得し、先に進んでください。

于 2009-09-29T23:05:22.267 に答える