亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

使用TRY CATCH進(jìn)行SQL Server異常處理<>

系統(tǒng) 2183 0

TRY...CATCH是Sql Server 2005/2008令人印象深刻的新特性.提高了開發(fā)人員異常處理能力.沒有理由不嘗試一下Try.. Catch功能.

??? *????? TRY 塊 - 包含可能產(chǎn)生異常的代碼或腳本
??? *????? CATCH 塊 - 如果TRY塊出現(xiàn)異常,代碼處理流將被路由到CATCH塊.在這里你可以處理異常,記錄日志等.
Sql Server中的Try Catch和C#,JAVA等語言的處理方式一脈相承.這種一致性才是最大的創(chuàng)新之處.

SQL SERVER 2000中異常處理:?

  1. CREATE ?PROC?usp_AccountTransaction??
  2. ??
  3. ????@AccountNum? INT ,??
  4. ??
  5. ????@Amount? DECIMAL ??
  6. ??
  7. AS ??
  8. ??
  9. BEGIN ??
  10. ??
  11. ???? BEGIN ? TRANSACTION ? --beginning?a?transaction.. ??
  12. ??
  13. ???????? UPDATE ?MyChecking? SET ?Amount?=?Amount?-?@Amount??
  14. ??
  15. ???????????? WHERE ?AccountNum?=?@AccountNum??
  16. ??
  17. ????????IF?@@ERROR?!=?0? --check?@@ERROR?variable?after?each?DML?statements.. ??
  18. ??
  19. ???????? BEGIN ??
  20. ??
  21. ???????????? ROLLBACK ? TRANSACTION ? --RollBack?Transaction?if?Error.. ??
  22. ??
  23. ???????????? RETURN ??
  24. ??
  25. ???????? END ??
  26. ??
  27. ???????? ELSE ??
  28. ??
  29. ???????? BEGIN ??
  30. ??
  31. ???????????? UPDATE ?MySavings? SET ?Amount?=?Amount?+?@Amount??
  32. ??
  33. ???????????????? WHERE ?AccountNum?=?@AccountNum??
  34. ??
  35. ????????????IF?@@ERROR?!=?0? --check?@@ERROR?variable?after?each?DML?statements.. ??
  36. ??
  37. ???????????? BEGIN ??
  38. ??
  39. ???????????????? ROLLBACK ? TRANSACTION ? --RollBack?Transaction?if?Error.. ??
  40. ??
  41. ???????????????? RETURN ??
  42. ??
  43. ???????????? END ??
  44. ??
  45. ???????????? ELSE ??
  46. ??
  47. ???????????? BEGIN ??
  48. ??
  49. ???????????????? COMMIT ? TRANSACTION ? --finally,?Commit?the?transaction?if?Success.. ??
  50. ??
  51. ???????????????? RETURN ??
  52. ??
  53. ???????????? END ??
  54. ??
  55. ???????? END ??
  56. ??
  57. END ??
  58. ??
  59. GO??

上面是Sql server 2000的一個(gè)存儲(chǔ)過程,在每個(gè)數(shù)據(jù)庫(kù)操作之后立即必須檢查@@ERROR,進(jìn)行Commit / RollBack該事務(wù).
Sql server 2000中監(jiān)測(cè)錯(cuò)誤,只能通過監(jiān)測(cè)全局遍歷 @@ERROR.由于@@ERROR會(huì)被下一個(gè)數(shù)據(jù)庫(kù)操作所覆蓋. 所以在每次操作完后必須立即監(jiān)測(cè).

SQL SERVER 2005中異常處理:

TRY...CATCH是SQL Server 2005提供的更具有可讀性的語法.每個(gè)開發(fā)人員都熟悉這種寫法.SQL Server 2005仍然支持@@ERROR這種用法.

1.try catch語法:?

  1. ?? BEGIN ?TRY??
  2. ??
  3. ????Try?Statement?1??
  4. ??
  5. ????Try?Statement?2??
  6. ??
  7. ????...??
  8. ??
  9. ????Try?Statement?M??
  10. ??
  11. END ?TRY??
  12. ??
  13. BEGIN ?CATCH??
  14. ??
  15. ????Catch?Statement?1??
  16. ??
  17. ????Catch?Statement?2??
  18. ??
  19. ????...??
  20. ??
  21. ????Catch?Statement?N??
  22. ??
  23. END ?CATCH??

2.獲得錯(cuò)誤信息的函數(shù)表:?

下面系統(tǒng)函數(shù)在CATCH塊有效.可以用來得到更多的錯(cuò)誤信息:

函數(shù) 描述
ERROR_NUMBER() 返回導(dǎo)致運(yùn)行 CATCH 塊的錯(cuò)誤消息的錯(cuò)誤號(hào)。
ERROR_SEVERITY() 返回導(dǎo)致 CATCH 塊運(yùn)行的錯(cuò)誤消息的嚴(yán)重級(jí)別
ERROR_STATE() 返回導(dǎo)致 CATCH 塊運(yùn)行的錯(cuò)誤消息的狀態(tài)號(hào)
ERROR_PROCEDURE() 返回出現(xiàn)錯(cuò)誤的存儲(chǔ)過程名稱
ERROR_LINE() 返回發(fā)生錯(cuò)誤的行號(hào)
ERROR_MESSAGE() 返回導(dǎo)致 CATCH 塊運(yùn)行的錯(cuò)誤消息的完整文本


簡(jiǎn)單示例:

  1. BEGIN ?TRY??
  2. ??
  3. ???? SELECT ?GETDATE()??
  4. ??
  5. ???? SELECT ?1/0 --Evergreen?divide?by?zero?example! ??
  6. ??
  7. END ?TRY??
  8. ??
  9. BEGIN ?CATCH??
  10. ??
  11. ???? SELECT ? 'There?was?an?error!?' ?+?ERROR_MESSAGE()??
  12. ??
  13. ???? RETURN ??
  14. ??
  15. END ?CATCH;??

3.try catch回滾/提交事務(wù)的示例

  1. ALTER ?PROC?usp_AccountTransaction??
  2. ??
  3. ????@AccountNum? INT ,??
  4. ??
  5. ????@Amount? DECIMAL ??
  6. ??
  7. AS ??
  8. ??
  9. BEGIN ??
  10. ??
  11. ???? BEGIN ?TRY? --Start?the?Try?Block.. ??
  12. ??
  13. ???????? BEGIN ? TRANSACTION ? --?Start?the?transaction.. ??
  14. ??
  15. ???????????? UPDATE ?MyChecking? SET ?Amount?=?Amount?-?@Amount??
  16. ??
  17. ???????????????? WHERE ?AccountNum?=?@AccountNum??
  18. ??
  19. ???????????? UPDATE ?MySavings? SET ?Amount?=?Amount?+?@Amount??
  20. ??
  21. ???????????????? WHERE ?AccountNum?=?@AccountNum??
  22. ??
  23. ???????? COMMIT ?TRAN? --?Transaction?Success! ??
  24. ??
  25. ???? END ?TRY??
  26. ??
  27. ???? BEGIN ?CATCH??
  28. ??
  29. ????????IF?@@TRANCOUNT?>?0??
  30. ??
  31. ???????????? ROLLBACK ?TRAN? --RollBack?in?case?of?Error ??
  32. ??
  33. ???????? --?you?can?Raise?ERROR?with?RAISEERROR()?Statement?including?the?details?of?the?exception ??
  34. ??
  35. ????????RAISERROR(ERROR_MESSAGE(),?ERROR_SEVERITY(),?1)??
  36. ??
  37. ???? END ?CATCH??
  38. ??
  39. END ??
  40. ??
  41. GO??

?

?

ref: http://www.it118.org/Specials/c9fba99e-4401-49cf-8256-ac3c1a34c0d9/4444b6c8-6dae-4c65-8d6d-beb334aee3e3.htm ?

使用TRY CATCH進(jìn)行SQL Server異常處理<>


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产精品免费福利 | 爆操在线 | 91国视频在线 | 久久久精品国产四虎影视 | 福利视频免费看 | 日本欧美高清全视频 | 一级亚洲 | 久操资源网| 亚洲国产高清美女在线观看 | 中文字幕亚洲欧美 | 亚洲欧美成人永久第一网站 | 亚洲一区二区三区首页 | 亚洲美女精品视频 | 女人zzzooooxxxx| 永久国产 | 色花堂国产精品第二页 | 国产一级二级三级 | 影视先锋av资源噜噜 | 亚洲精品视 | 久久制服诱惑 | 99re这里只有精品国产精品 | 国产一区在线免费观看 | 久久久久久久久久久福利观看 | 成人黄色免费 | 最新国产精品精品视频 | 国产一极毛片 | 99久热在线精品视频播 | 成人毛片18岁女人毛片免费看 | 九九色播 | 亚洲精品久久久久久久777 | 毛片一级免费 | 亚洲伦理一二三四 | 九九影视理伦片 | 精品久久久久久久久久久久久久久 | 99久久亚洲精品影院 | 四虎影视网站 | 中国漂亮护士一级毛片 | 成人a毛片免费全部播放 | 久久精品小视频 | 成人在线观看网站 | 国产精品你懂的在线播放 |