亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

SQL Server 2005 中使用 Try Catch 處理異常

2024-08-31 01:03:59
字體:
來源:轉載
供稿:網友

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

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

一、SQL SERVER 2000中異常處理

CREATE PROC usp_AccountTransaction    @AccountNum INT,    @Amount DECIMAL  AS  BEGIN    BEGIN TRANSACTION --beginning a transaction..      UPDATE MyChecking SET Amount = Amount - @Amount        WHERE AccountNum = @AccountNum      IF @@ERROR != 0 --check @@ERROR variable after each DML statements..      BEGIN        ROLLBACK TRANSACTION --RollBack Transaction if Error..        RETURN      END      ELSE      BEGIN        UPDATE MySavings SET Amount = Amount + @Amount          WHERE AccountNum = @AccountNum        IF @@ERROR != 0 --check @@ERROR variable after each DML statements..        BEGIN          ROLLBACK TRANSACTION --RollBack Transaction if Error..          RETURN        END        ELSE        BEGIN          COMMIT TRANSACTION --finally, Commit the transaction if Success..          RETURN        END      END  END  GO 

上面是Sql server 2000的一個存儲過程,在每個數據庫操作之后立即必須檢查@@ERROR,進行Commit / RollBack該事務.
Sql server 2000中監測錯誤,只能通過監測全局遍歷 @@ERROR.由于@@ERROR會被下一個數據庫操作所覆蓋. 所以在每次操作完后必須立即監測.

二、SQL SERVER 2005中異常處理

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

1.try catch語法:

BEGIN TRY    Try Statement 1    Try Statement 2    ...    Try Statement M  END TRY  BEGIN CATCH    Catch Statement 1    Catch Statement 2    ...    Catch Statement N  END CATCH 

2.獲得錯誤信息的函數表:

下面系統函數在CATCH塊有效.可以用來得到更多的錯誤信息:

函數 描述

ERROR_NUMBER() 返回導致運行 CATCH 塊的錯誤消息的錯誤號。
ERROR_SEVERITY() 返回導致 CATCH 塊運行的錯誤消息的嚴重級別
ERROR_STATE() 返回導致 CATCH 塊運行的錯誤消息的狀態號
ERROR_PROCEDURE() 返回出現錯誤的存儲過程名稱
ERROR_LINE() 返回發生錯誤的行號
ERROR_MESSAGE() 返回導致 CATCH 塊運行的錯誤消息的完整文本

簡單示例:

BEGIN TRY    SELECT GETDATE()    SELECT 1/0--Evergreen divide by zero example!  END TRY  BEGIN CATCH    SELECT 'There was an error! ' + ERROR_MESSAGE()    RETURN  END CATCH; 

3.try catch回滾/提交事務的示例

ALTER PROC usp_AccountTransaction    @AccountNum INT,    @Amount DECIMAL  AS  BEGIN    BEGIN TRY --Start the Try Block..      BEGIN TRANSACTION -- Start the transaction..        UPDATE MyChecking SET Amount = Amount - @Amount          WHERE AccountNum = @AccountNum        UPDATE MySavings SET Amount = Amount + @Amount          WHERE AccountNum = @AccountNum      COMMIT TRAN -- Transaction Success!    END TRY    BEGIN CATCH      IF @@TRANCOUNT > 0        ROLLBACK TRAN --RollBack in case of Error      -- you can Raise ERROR with RAISEERROR() Statement including the details of the exception      RAISERROR(ERROR_MESSAGE(), ERROR_SEVERITY(), 1)    END CATCH  END  GO

三、實例講解

創建錯誤日志表:

CREATE TABLE ErrorLog(errNum INT,ErrSev NVARCHAR(1000),ErrState INT,ErrProc NVARCHAR(1000),ErrLine INT, ErrMsg NVARCHAR(2000))

創建錯誤日志記錄存儲過程:

CREATE PROCEDURE ErrorLogAS    SELECT ERROR_NUMBER() AS ErrNum,ERROR_SEVERITY()AS ErrSev,ERROR_STATE() AS ErrState,ERROR_PROCEDURE() AS ErrProc,ERROR_LINE()AS ErrLine,ERROR_MESSAGE()AS ErrMsg    INSERT    INTO ErrorLog    VALUES(ERROR_NUMBER(),ERROR_SEVERITY(),ERROR_STATE(),ERROR_PROCEDURE(),ERROR_LINE(),ERROR_MESSAGE())GO

寫一個存儲過程吧!里面使用一下Try Catch:

USE [Your_Test]GO/****** Object: StoredProcedure [dbo].[getTodayBirthday]      Script Date: 05/17/2010 15:38:46     Author:jinho    Desc:獲取當天生日的所有人    ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[getTodayBirthday]ASBEGIN TRY declare @today datetime;  SET @today = GETDATE();--獲取今天的日期 DECLARE @day VARCHAR(2); SET @day =REPLACE(DAY(@today),0,''); DECLARE @month VARCHAR(2) ; SET @month = REPLACE(month(@today),0,''); DECLARE @year VARCHAR(4); SET @year = YEAR(@today); SELECT * FROM dbo.UserInfo WHERE REPLACE(DAY(CONVERT(DATETIME,Birthday )),0,'') =@day AND REPLACE(MONTH(CONVERT(DATETIME,Brithday)),0,'')=@month AND Birthday IS NOT NULL  END TRY BEGIN CATCH ErrorLog --調用上面的存儲過程,保存錯誤日志 END CATCH

說明:ERROR_NUMBER(),ERROR_SEVERITY(),ERROR_STATE(),ERROR_PROCEDURE(),ERROR_LINE(),ERROR_MESSAGE() 這幾個函數只能用在Catch里面!

 


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色婷婷亚洲mv天堂mv在影片| 国产精品日韩久久久久| 日韩精品久久久久久福利| 日韩av中文字幕在线播放| 91av在线播放视频| 亚洲精品日韩久久久| 国产精品久久久久久久久久久久| 97精品一区二区视频在线观看| 色樱桃影院亚洲精品影院| 亚洲丝袜一区在线| 高清欧美一区二区三区| 亚洲综合精品伊人久久| 国产欧亚日韩视频| 久久久噜噜噜久久久| 国产69精品久久久久9999| 日韩性生活视频| 欧美日韩免费在线| 日韩一区在线视频| 国产精品久久久久免费a∨大胸| 欧美一级高清免费播放| 国产日本欧美在线观看| 国产精品日日做人人爱| 成人福利网站在线观看11| 国产成人精品免高潮在线观看| 久久亚洲精品中文字幕冲田杏梨| 久久精品人人爽| 日韩毛片中文字幕| 欧美国产亚洲视频| 久久精品影视伊人网| 国产精品亚洲美女av网站| 国产精品美女午夜av| 国产成人精品视频在线观看| 米奇精品一区二区三区在线观看| 亚洲free性xxxx护士白浆| www.欧美三级电影.com| 日韩av快播网址| 精品国产91乱高清在线观看| 97视频在线观看视频免费视频| 91精品国产99| 91av在线免费观看视频| 中文字幕国产精品久久| 色yeye香蕉凹凸一区二区av| 亚洲美女自拍视频| 欧美—级高清免费播放| 伦理中文字幕亚洲| 国产精品在线看| 欧美另类高清videos| 日韩亚洲一区二区| 欧美麻豆久久久久久中文| 91欧美精品午夜性色福利在线| 亚洲天堂av女优| 欧美一级电影在线| 国产91在线播放精品91| 社区色欧美激情 | 亚洲成av人乱码色午夜| 久久久99久久精品女同性| 日韩大片免费观看视频播放| 欧美插天视频在线播放| 美女国内精品自产拍在线播放| 一本大道久久加勒比香蕉| 亚洲国产日韩欧美在线99| 亚洲欧美精品一区| 亚洲精品综合精品自拍| 国产精品日日做人人爱| 在线免费观看羞羞视频一区二区| 在线观看日韩视频| 一二美女精品欧洲| 欧美日韩美女在线观看| 高清欧美性猛交xxxx| 欧美日韩国产影院| 秋霞成人午夜鲁丝一区二区三区| 亚洲一区二区三区在线免费观看| 成人福利免费观看| 国产精品自拍偷拍| 久久这里只有精品视频首页| 美女久久久久久久久久久| 主播福利视频一区| 国产精品欧美一区二区| 久久综合久中文字幕青草| 亚洲激情久久久| 中文字幕亚洲综合久久筱田步美| 91精品久久久久久久久青青| 国产精品久久久久久久av电影| 欧美激情一级精品国产| 欧美日韩在线看| 国产精品久久精品| 欧美成人午夜视频| 久久久综合免费视频| 最近2019中文免费高清视频观看www99| 亚洲自拍偷拍网址| 久久国产精品久久国产精品| 91在线高清免费观看| 久久久久久久久久久91| 国产亚洲人成a一在线v站| 中文字幕国产精品久久| 国产精品日韩欧美大师| 国产欧美久久一区二区| 国产精品成人av在线| 亚洲一级黄色av| 麻豆一区二区在线观看| 91日本在线视频| 日韩av影院在线观看| 久久99国产精品久久久久久久久| 国产精品久久久久久婷婷天堂| 久久福利网址导航| 国产一区视频在线| 亚洲欧美精品伊人久久| 欧美另类精品xxxx孕妇| 91亚洲精品一区二区| 97超碰国产精品女人人人爽| 色偷偷偷亚洲综合网另类| 久久久久久久久久久国产| 热久久99这里有精品| 日韩av手机在线看| 日韩av在线精品| 欧美日韩性视频在线| 欧美黄色片免费观看| 欧美电影免费观看| 久久亚洲一区二区三区四区五区高| 97国产成人精品视频| 中文字幕亚洲欧美日韩高清| 日韩欧美福利视频| 国内揄拍国内精品少妇国语| 久99九色视频在线观看| 欧美理论电影在线观看| 欧美老女人在线视频| 在线亚洲国产精品网| 欧美整片在线观看| 久久影视免费观看| 一区二区福利视频| 日本高清不卡的在线| 日韩暖暖在线视频| 亚洲欧美一区二区三区久久| 亚洲一区制服诱惑| 国产做受高潮69| 久久成人免费视频| 91精品国产乱码久久久久久久久| 国产精品久久二区| 91精品视频在线播放| 精品中文字幕久久久久久| 中文字幕日韩在线视频| 欧美成人精品h版在线观看| 亚洲色图激情小说| 色青青草原桃花久久综合| 久久精品影视伊人网| 日韩成人高清在线| 91九色单男在线观看| 国产亚洲欧美一区| 国产精品久久久久久久app| 国产精品91久久久| 久国内精品在线| 中文字幕免费精品一区| 久久久免费av| 综合国产在线视频| 日本精品久久久| 亚洲欧美国产精品| 亚洲第一二三四五区| 岛国av在线不卡| 夜夜嗨av色综合久久久综合网| 国产成人免费91av在线| 国产精品三级在线| 欧美性xxxxxxx| 精品偷拍各种wc美女嘘嘘| 亚洲国产97在线精品一区|