2010-01-16 20 views
0

我需要編寫一個存儲過程來將一行插入到表中。該表具有稱爲ID的標識列。我的問題是我應該返回價值,如果是,如何?INSERT存儲過程應該使用Identity值做什麼?

據我所看到的,

  • 我能回到它的返回值,
  • 我可以回到它作爲out參數,或
  • 我能做到與它無關。

數據庫程序員會默認做什麼?

回答

2

如果你正在尋找一種真正的書寫所有插入程序的方法,那麼你就是在浪費你的時間。在你的數據庫中總會有一個表格,需要你以某種方式違反你自己的約定。你可以期望的最好的是一套一般的一致性準則(不是規則)。

對於一般的一致性準則,我建議如下:

  • 的返回值始終是int,不能改變。因此,最好保留爲成功返回零或@@error失敗。
  • 如果您有少量標量值要發回,則輸出參數比默認結果集更有效。因此,您可以以這種方式返回@@identity值和任何其他自動生成的值(例如GUID,時間戳)。
+0

感謝您的回覆。我從別處的經驗中知道,總會有妥協,所以我一直在尋找一個默認的位置,而不是一個偉大的事實。即使其他帖子同意你的意見,我也接受它,因爲它很清晰並提供額外的信息。 – ssg31415926 2010-01-16 16:55:30

3

「這取決於」。

大多數時候,我忽略它。大多數呼叫者不需要它。如果你不知道你的消費者,那麼我可能會返回它作爲結果集(所以你不強迫附加參數的人誰不需要它)。

+0

我同意這一點。問題是,有一天您可能會發現自己需要插入兩到三行來處理請求,這就是您必須在返回ID時進行重大更改的時間。 – GSerg 2010-01-16 15:49:41

2

我更喜歡返回作爲返回值如果它應該有一天會被使用。

如果沒用,那麼我不會在這裏增加額外的複雜性。

2

我同意喬 - 這取決於。返回它的一個好處是你的呼叫應用程序可以使用ID作爲成功的指示。

2

通常我會返回整個新行,其中當然包括縮進列的值。我返回整個新行的原因是因爲很可能通過觸發器或其他進程將其他列添加到行中,並且調用應用程序或進程會發現有新行的行是有用的。

0

我通常將其作爲out參數添加,並將返回值保留爲0表示成功,對於失敗則保留爲0。