2

我正在學習MCTS 70-433「數據庫設計」證書,在我正在學習的文本中,其中一個自檢具有此問題。存儲過程和表值函數的OUTPUT子句

您有一個名爲 的存儲過程Get_NewProducts。您希望將此存儲過程 的結果 插入到Production.Product表中,並且 使用 OUTPUT子句輸出INSERTED。*值。 要做到這一點的最佳途徑是什麼?

有四種可能的答案。前三種選擇是「INSERT ... OUTPUT ... EXECUTE Get_NewProducts」聲明的所有變體。第四個選項D簡單地說「將存儲過程重寫爲表值函數」。

D是正確的答案。我不太明白爲什麼,文中沒有任何內容可以解釋它。任何人有任何見解?

回答

5

那麼從msdn

「 OUTPUT子句中沒有引用本地分區視圖,分佈式分區視圖或遠程表,或包含一個execute_statementINSERT語句DML語句支持」

+0

Man ...在TSQL參考頁面也是如此(http://technet.microsoft.com/en-us/library/ms177564.aspx),我檢查了它。現在你指出了它,它直接跳到我身上。只是另一個「閱讀文檔」的例子,我猜:)謝謝! – womp 2009-09-30 00:02:23

+0

不,謝謝...自93/94(版本4.2)以來,我一直在使用SQL,並且我意識到我需要閱讀所有在最近幾個版本中添加的新東西。我不知道輸出關鍵字甚至存在,直到我檢查文檔研究回答你的問題。 – 2009-09-30 01:04:34

1

我下意識的反應這個(我又打它幾天前)是:

  • 存儲過程可以而且經常是嵌套的。過程A調用B調用C,依此類推。
  • 由INSERT ... EXECUTE ...語句調用的代碼本身不能包含或引用INSERT ... EXECUTE ...語句。如果你放入一個,那麼你不能在後面的INSERT中嵌入這個過程... EXECUTE ...

這看起來很平常,一般來說,至少在重構過程中項目。一朝被蛇咬十年怕井繩。 (並且它有點多次。)

還有一些風格和外觀的原因,但它們有點膚淺。可能存在嚴重的技術原因,可能與重新編譯或查詢執行計劃有關;如果是這樣,希望別人會發布他們。

0

只有一個原因,他們的「正確答案」是不正確的:TVF有錯誤檢查和報告的問題。

這是一個非常奇怪的問題/答案,因爲D似乎沒有給出這個問題的可能性。

0

我不知道一個'正確'的答案,但我猜測作者的思想是70-433 Database Development開發和設計面向考試,而不是說'數據訪問'考試如70-442。在設計階段,您應該能夠發現現有系統中的故障並提出更好的解決方案。作者認爲需要將輸出插入表中的存儲過程最好重寫爲TVF。你會發現兩者都是弊端,因爲TVF是否比proc更好(插入exec嵌套pro,錯誤處理con只是開始)。

我自己參加了一些這些考試,發現考試準備材料和考試本身並不總是他們的主題的絕對最終參考。在大的他們是正確的和良好的價值,但他們有時間問題,我發現至少一些可疑的建議,甚至明顯的錯誤的。並且在我發現錯了,我居然上午關於這個問題的最終參考,他們被覆蓋,我的特點,我設計編寫代碼...

我的忠告是:是什麼感覺的主題「預期」答案並在實際考試中爲其做好準備。考慮到你的天賦點和我見過的答案,你已經在以上考試級別,所以只需要通過這些環節,賺取考試徽章並繼續前進。

+0

感謝您的友好的話。我同意準備材料不是最終參考 - 我只是恨它,當一個文本引用這樣的東西,你不能從書本身發現。說實話......我對整體文字印象不深......這是Syngress「Prep Kit」一書。需要另外幾個編輯來看看IMO。 – womp 2009-09-30 00:11:58