SQL 異常處理 Begin try end try begin catch end catch--轉

SQL 異常處理 Begin try end try begin catch end catch

總結了一下錯誤捕捉方法:try catch ,@@error, raiserror

這是在數據庫轉換的時候用的的異常處理,

Begin Try
Insert?into?SDT.dbo.DYEmpLostTM(LogDate,ProdGroup,ShiftCode,EmployeeNo,MONo,
OpNo,OTFlag,LostTypeID,OffStdTime,EmployeeGroup,CMFlag)
values(@LogDate,@ProdGroup,@ShiftCode,@EmployeeNo,@MONo,@OpNo,@OTFlag,
@LostTypeID,@OffStdTime,@EmployeeGroup,@CMFlag);

END try????

BEGIN CATCH
DECLARE?@Error int
SET?@Error =?Error_Number()
if?@Error = 2627????
????Insert?into?Migration.dbo.DYEmpLostTMError(LogDate,ProdGroup,ShiftCode,EmployeeNo,MONo,
??? OpNo,OTFlag,LostTypeID,OffStdTime,EmployeeGroup,CMFlag,ErrorDesc)
??? values(@LogDate,@ProdGroup,@ShiftCode,@EmployeeNo,@MONo,@OpNo,@OTFlag,
??? @LostTypeID,@OffStdTime,@EmployeeGroup,@CMFlag,Error_Message()?);
END CATCH

?

錯誤代碼2627:表示
違反了 %ls 約束 '%.*ls'。不能在對象 '%.*ls' 中插入重復鍵。

每個數據庫引擎錯誤都包含以下屬性:

錯誤代碼,消息字符串,嚴重性,狀態,過程名稱,行號.

ERROR_NUMBER()?:返回錯誤號

ERROR_MESSAGE()?:返回錯誤信息

ERROR_LINE()??????? :返回錯誤所在的行.

ERROR_PROCEDURE()?:返回出現錯誤的存儲過程或觸發器的名稱。如果在存儲過程或觸發器中未出現錯誤,該函數返回 NULL

ERROR_STATE()???: 返回狀態

ERROR_SEVERITY() :?返回嚴重性

------------------------------------------------------------------------------------------

?

@@rowcount返回受上一個語句影響的行數,如果返回的行大于20億行的話,用rowcount_big

?

位于 SELECT 語句之后時,該函數返回由 SELECT 語句返回的行數。

位于 INSERT、UPDATE 或 DELETE 語句之后時,該函數返回受數據修改語句影響的行數。

位于 IF 這類不返回行的語句之后時,該函數返回 0。

---------------------------------------------------------------------------

如果在一個語句之后,同時使用@@rowcount ,和@@error的話,必須把這兩個放入一個語句中

update film set filname='aa'
go
print @@error

go
print @@rowcount
運行這個語句返回的結果是:

Msg 207, Level 16, State 1, Line 1
Invalid column name 'filname'.
207
0
而運行

update film set filname='aa'
go
print @@rowcount

go
print @@error

返回的結果是:

Msg 207, Level 16, State 1, Line 1
Invalid column name 'filname'.
0
0

從這兩個實例看出:如果運行語句之后想查看是否成功,后面必須緊跟@@error?.不能有其他語句:

????? update film set filname='aa'
????? go
DECLARE @ERROR INT;
????? DECLARE @ROWCOUNT INT;

????? SELECT @ERROR=@@ERROR,@ROWCOUNT=@@ROWCOUNT
??????
????? PRINT @ROWCOUNT
????? PRINT @ERROR

--------------------------------------------------------------------------------

TRY...CATCH 塊不處理導致數據庫引擎 終止連接的嚴重性為 20 或更高的錯誤。但是,只要連接不終止,TRY...CATCH 就會處理嚴重性為 20 或更高的錯誤。

??????嚴重性為 10 或更低的錯誤被視為警告或信息性消息,TRY...CATCH 塊不處理此類錯誤.

--------------------------------------------------------Raiserror 異常

BEGIN CATCH
SET @Error = Error_Number()
if @Error <> 2627????
??? Raiserror('Unexpected error: "%i"',16,1,@Error) WITH SetError
end catch

http://blog.csdn.net/wobuwei/archive/2009/08/18/4459019.aspx

轉載于:https://www.cnblogs.com/renyb/archive/2012/05/03/2480605.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379752.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379752.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379752.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FreeRTOS中斷配置與臨界段

Cortex-M中斷 中斷是指計算機運行過程中&#xff0c;出現某些意外情況需主機干預時&#xff0c;機器能自動停止正在運行的程序并轉入處理新情況的程序&#xff08;中斷服務程序&#xff09;&#xff0c;處理完畢后又返回原被暫停的程序繼續運行。Cortex-M內核的MCU提供了一個用…

vector向量容器

一、vector向量容器 簡介&#xff1a; Vector向量容器可以簡單的理解為一個數組&#xff0c;它的下標也是從0開始的&#xff0c;使用時可以不用確定大小&#xff0c;但是它可以對于元素的插入和刪除&#xff0c;可以進行動態調整所占用的內存空間&#xff0c;它里面有很多系統…

netsh(二)

netsh 來自微軟的網絡管理看家法寶很多時候&#xff0c;我們可能需要在不同的網絡中工作&#xff0c;一遍又一遍地重復修改IP地址是一件比較麻煩的事。另外&#xff0c;系統崩潰了&#xff0c;重新配置網卡等相關參數也比較煩人&#xff08;尤其是無線網卡&#xff09;。事實上…

java uuid靜態方法_Java UUID getLeastSignificantBits()方法與示例

java uuid靜態方法UUID類getLeastSignificantBits()方法 (UUID Class getLeastSignificantBits() method) getLeastSignificantBits() method is available in java.util package. getLeastSignificantBits()方法在java.util包中可用。 getLeastSignificantBits() method is us…

Google C2Dm相關文章

Android C2DM學習——云端推送&#xff1a;http://blog.csdn.net/ichliebephone/article/details/6591071 Android C2DM學習——客戶端代碼開發&#xff1a;http://blog.csdn.net/ichliebephone/article/details/6626864 Android C2DM學習——服務器端代碼開發&#xff1a;http…

FreeRTOS的列表和列表項

列表和列表項 列表 列表是FreeRTOS中的一個數據結構&#xff0c;概念上和鏈表有點類型&#xff0c;是一個循環雙向鏈表&#xff0c;列表被用來跟蹤FreeRTOS中的任務。列表的類型是List_T&#xff0c;具體定義如下&#xff1a; typedef struct xLIST {listFIRST_LIST_INTEGRI…

string基本字符系列容器

二、string基本字符系列容器 簡介&#xff1a;C語言只提供了一個char類型來處理字符&#xff0c;而對于字符串&#xff0c;只能通過字符串數組來處理&#xff0c;顯得十分不方便。CSTL提供了string基本字符系列容器來處理字符串&#xff0c;可以把string理解為字符串類&#x…

正則表達式(一)

正則表達式概述 1.1什么是正則表達式&#xff1f; 正則表達式(Regular Expression)起源于人類神經系統的早期研究。神經生理學家Warren McCulloch和Walter Pitts研究出一種使用數學方式描述神經網絡的方法。1956年&#xff0c;數學家Stephen Kleene發表了一篇標題為“神經…

42.有“舍”才有“得”

大干世界&#xff0c;萬種誘惑&#xff0c;什么都想要&#xff0c;會累死你&#xff0c;該放就放&#xff0c;該舍就舍。人必須先有所舍&#xff0c;才能有所得&#xff0c;舍如同種子撒播出去&#xff0c;轉了一圈&#xff0c;又帶了一大群子子孫孫回來。“舍”永遠在“得”的…

Java StringBuilder codePointCount()方法與示例

StringBuilder類codePointCount()方法 (StringBuilder Class codePointCount() method) codePointCount() method is available in java.lang package. codePointCount()方法在java.lang包中可用。 codePointCount() method is used to count the number of Unicode code point…

FreeRTOS時間管理

在使用FreeRTOS的過程中&#xff0c;我們通常會在一個任務函數中使用延時函數對這個任務延時&#xff0c;當執行延時函數的時候就會進行任務切換&#xff0c;并且此任務就會進入阻塞太&#xff0c;直到延時完成&#xff0c;任務重新進入就緒態。延時函數舒屬于FreeRTOS的時間管…

set和multiset集合容器

三、①set集合容器 簡介&#xff1a;set集合的目的就是為了快速檢索。set集合容器實現了紅黑樹的平衡二叉檢索樹的數據結構。set集合里面不允許有重復的元素出現&#xff1b;使用set容器前&#xff0c;需要在程序的頭文件中聲明 #include < set >。 函數方法總結&#…

javascript獲取select的值全解

獲取顯示的漢字 document.getElementById("bigclass").options[window.document.getElementById("bigclass").selectedIndex].text 獲取數據庫中的id window.document.getElementById("bigclass").value 獲取select組分配的索引id window.docume…

Java File類void deleteOnExit()方法(帶示例)

文件類void deleteOnExit() (File Class void deleteOnExit()) This method is available in package java.io.File.deleteOnExit(). 軟件包java.io.File.deleteOnExit()中提供了此方法。 This method is used to delete the file or directory when the virtual machine termi…

FreeRTOS隊列

在實際應用中&#xff0c;我們會遇到一個任務或者中斷服務需要和另一個任務進行消息傳遞&#xff0c;FreeRTOS提供了隊列的機制來完成任務與任務、任務與中斷之間的消息傳遞。 0x01 隊列簡介 隊列是為了任務與任務、任務與中斷之間的通信而準備的&#xff0c;可以在任務與任務…

括號配對問題(C)

描述 現在&#xff0c;有一行括號序列&#xff0c;請你檢查這行括號是否配對。 輸入 第一行輸入一個數N&#xff08;0<N<100&#xff09;,表示有N組測試數據。后面的N行輸入多組輸入數據&#xff0c;每組輸入數據都是一個字符串S(S的長度小于10000&#xff0c;且S不是空串…

劇情介紹:“阿甘正傳”

阿甘是個智商只有75的低能兒。在學校里為了躲避別的孩子的欺侮&#xff0c;聽從一個朋友珍妮的話而開始“跑”。他跑著躲避別人的捉弄。在中學時&#xff0c;他為了躲避別人而跑進了一所學校的橄欖球場&#xff0c;就這樣跑進了大學。阿甘被破格錄取&#xff0c;并成了橄欖球巨…

java 方法 示例_Java集合syncedList()方法與示例

java 方法 示例集合類syncList()方法 (Collections Class synchronizedList() method) synchronizedList() method is available in java.util package. syncList()方法在java.util包中可用。 synchronizedList() method is used to return the synchronized view of the given…

FreeRTOS信號量---二值信號量

信號量可以用來進行資源管理和任務同步&#xff0c;FreeRTOS中信號量又分為二值信號量、計算型信號量、互斥信號量和遞歸互斥信號量。 0x01 二值信號量 二值信號量其實就是一個只有一個隊列項的隊列&#xff0c;這個特殊的隊列要么是滿的&#xff0c;要么是空的&#xff0c;任…

Linux 上 rpm包管理工具的基本使用

查詢是否安裝某個包&#xff1a;rpm -q 包名查詢所有已安裝的包&#xff1a;rpm -q a查詢未安裝包的文件信息&#xff1a;rpm -qilp 未安裝的包安裝包&#xff1a;rpm -i 包測試安裝包&#xff1a;rpm -i test 包刪除包&#xff1a;rpm -e 包名測試刪除包&#xff1a;rpm -e te…