SQL Server研習錄(23)——RAISERROR()函數

SQL Server研習錄(23)——RAISERROR函數


版權聲明

  • 本文原創作者:清風不渡
  • 博客地址:https://blog.csdn.net/WXKKang

一、RAISERROR()函數

  概念:生成錯誤消息並啓動會話的錯誤處理。RAISERROR可以引用sys.message目錄視圖中存儲的用戶定義消息,也可以動態建立消息。該消息作爲服務器錯誤的消息返回到調用應用程序,或返回到TRY…CATCH構造的關聯CATCH塊。新應用程序應改用THROW

1、基本語法

  基本語法如下:

-- Syntax for SQL Server and Azure SQL Database(SQL Server和Azure SQL數據庫的語法 ) 
RAISERROR ( { msg_id | msg_str | @local_variable }  
			{ ,severity ,state }  
			[ ,argument [ ,...n ] ] )  
			[ WITH option [ ,...n ] ]
			
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse(用於Azure SQL數據倉庫和並行數據倉庫的語法)
RAISERROR ( { msg_str | @local_variable }  
			{ ,severity ,state }  
			[ ,argument [ ,...n ] ] )  
			[ WITH option [ ,...n ] ]

  註釋:
  (1)參數
  參數msg_id: 使用sp_addmessage存儲在sys.message目錄視圖中的用戶定義錯誤消息號。用戶定義的錯誤消息的錯誤號應大於50000。若未指定msg_id,RAISERROR會引發一個錯誤號爲50000的錯誤消息
  參數msg_str: 用戶定義的消息,格式與C標準庫中的printf函數類似。該錯誤消息最長可以有2047個字節。如果該消息包含的字符數等於或者超過2048個,則只能顯示前2044個並添加一個省略號以表示該消息已被截斷。請注意,由於內部存儲行爲的緣故,代替參數使用的字符數比輸出所顯示的字符要更多。例如,賦值爲2的代言參數%d實際在消息字符串中生成一個字符,但是還會在內部佔用另外三個存儲字符。此存儲要求減少了可用於消息輸出的字符數
  若指定了msg_str,RAISERROR會引發一個錯誤號爲50000的錯誤消息
  msg_str是一個字符串,具有可選的嵌入轉換規格。每個轉換規格都會定義參數列表中的值如何格式化並將其置於msg_str中轉換規格位置上的字段中,轉換規格的格式如下:

% [[flag] [width] [. precision] [{h | l}]] type

  可在msg_str中使用的參數包括:
  flag
  用於確定被替換值的間距和對齊的代碼:
在這裏插入圖片描述
  width
  定義放置參數值的字段的最小寬度的整數。 如果參數值的長度等於或大於 width,則打印該值,無需進行填充。 如果該值小於 width,則將該值填充到 width 中指定的長度
  星號 (*) 表示寬度由參數列表中的相關參數指定,該寬度必須爲整數值
  精度
  從字符串值的參數值中得到的最大字符數。 例如,如果一個字符串具有五個字符並且精度爲 3,則只使用字符串值的前三個字符
  對於整數值,precision 是指打印的最小位數
  星號 (*) 表示精度由參數列表中的相關參數指定,該精度必須爲整數值
  {h | l} type
  與字符類型 d、i、o、s、x、X 或 u 一起使用,用於創建 shortint (h) 值或 longint (l) 值,字符類型解釋如下:
在這裏插入圖片描述
  參數local_variable@: 是一個可以爲任何有效字符數據類型的變量,其中包含的字符串的格式化方式與 msg_str 相同 。 @local_variable 必須爲 char 或 varchar,或者能夠隱式轉換爲這些數據類型
  參數severity: 用戶定義的與該消息關聯的嚴重級別。 使用 msg_id 引發使用 sp_addmessage 創建的用戶定義消息時,RAISERROR 上指定的嚴重性會替代 sp_addmessage 中指定的嚴重性
  注意:任何用戶都可以指定 0 到 18 之間的嚴重級別。 只有 sysadmin 固定服務器角色成員或具有 ALTER TRACE 權限的用戶才能指定 19 到 25 之間的嚴重級別。 若要使用 19 到 25 之間的嚴重級別,必須選擇 WITH LOG 選項。 將小於 0 的嚴重級別解釋爲 0。 將大於 25 的嚴重級別解釋爲 25,20 到 25 之間的嚴重級別被認爲是致命的。 如果遇到致命的嚴重級別,客戶端連接將在收到消息後終止,並將錯誤記錄到錯誤日誌和應用程序日誌
  參數State: 0 到 255 之間的整數。 負值默認爲 1。 不應使用大於 255 的值,如果在多個位置引發相同的用戶定義錯誤,則針對每個位置使用唯一的狀態號有助於找到引發錯誤的代碼段
  參數argument: 用於代替 msg_str 或對應於 msg_id 的消息中定義的變量的參數。 可以有 0 個或更多個替換參數,但替換參數的總數不能超過 20。 每個替換參數可以是本地變量或下列任何數據類型:tinyint、smallint、int、char、varchar、nchar、nvarchar、binary 或 varbinary。,不支持其他數據類型
  參數option: 錯誤的自定義選項,可以是下表中的任一值:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章