一、raiseerror宏
raiseerror是一個T-SQL語句,用來在用戶定義的錯誤消息中拋出一個錯誤。通過使用這個宏可以讓用戶自定義錯誤消息並拋出。語法如下:
RAISERROR ( { msg_id | msg_str | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]
msg_id或msg_str指明消息的ID或文字。severity是錯誤的嚴重程度level,從1~25級。state是這個錯誤的狀態碼,一般用來幫助客戶區分錯誤的源頭。比如,ERR001是application error,ERR002是server error。如果沒有提供state的話會默認是1。argument是可選項,用戶提供的一組為錯誤消息參數提供值的變量。option是使用下面的指令來進一步定義的一些其他的選項:
- LOG(打印到windows日誌)
- NOWAIT(立即向客戶端發送響應,而不是等待batch完成)
- SETERROR(如果啟用了 NOCOUNT,則即使在 TRY/CATCH 塊中也會產生錯誤消息)
二、raiseerror缺點
raiseerror是一個非常強大的工具,但是它也有一些缺點。首先,如果使用太過於頻繁,就可能會導致性能問題。其次,最值得關注的是,如果代碼中不恰當地使用了raiseerror,可能會讓客戶端產生印象非常糟糕的錯誤信息,於是客戶端很可能失去信心甚至產生恐慌,這是非常危險的。所以,在使用raiseerror之前一定要考慮清楚。
三、raiseerror操作
raiseerror能夠拋出自定義的錯誤消息,方便定位錯誤,在編寫複雜的T-SQL語句時尤為重要。下面給大家舉一個例子:
DECLARE @my_var CHAR(2);
SET @my_var = 'B';
IF @my_var = 'B'
RAISERROR ('The value of variable @my_var cannot be "B".', 16, 1);
GO
在這個例子中,如果變量@my_var為字符B的話就會拋出我們自定義的錯誤消息「The value of variable @my_var cannot be “B”.」。severity等級為16,state為1。
四、raiseerror是哪錯了
在開發過程中,我們經常會遇到T-SQL語句返回錯誤的情況。有些錯誤是直接顯示錯誤信息提示的,比如divide-by-zero error。但是有些錯誤顯得非常糾結,比如’There is already an object named ‘xxx’ in the database’,這時我們需要更好的錯誤提示信息幫助我們快速找出問題並且解決。這時raiseerror就可以派上用場了。
五、raiseerror函數
raiseerror是一個T-SQL語句,也是一個函數。函數使用時需要注意,運行過程會拋出異常,所以需要寫在try…catch塊里。同時,任何對數據庫的更改操作(比如CREATE)都必須放在一個批次里,否則在實現過程中會出現「無法獲取當前數據庫」錯誤。同時,由於T-SQL語句會中斷一條代碼行,所以一定要注意在T-SQL語句塊間放置分號(;),以防止代碼被解釋器錯誤切分。
六、raiseerror在if函數裏面應用
RAISEERROR除了可以作為獨立的語句外,還可以作為IF語句中的一部分,來控制異常的具體行為。比如我們可以使用如下的代碼:
IF EXISTS(select * from demo_table)
BEGIN
RAISERROR('demo_table exits',16,1)
END
在demo_table存在的情況下,就會跳出IF語句並且拋出我們自定義的錯誤信息。
七、raiseerror在宏里怎麼找不到
有時我們在使用raiseerror時會出現類似「名稱『RAISERROR』並不屬於此範圍。它可能是一個未聲明的變量、函數或存儲過程」的錯誤提示,這是因為在宏中使用raiseerror時,還要特別注意raiseerror所處的作用域以及是否已經啟用。要使用raiseerror,必須先啟用宏:在T-SQL代碼的一開始使用「SET」選項(replace xx with your macro name):
SET QUOTED_IDENTIFIER ON;
SET ANSI_NULLS ON;
GO
CREATE Procedure xx
AS
...
八、raiseerror在宏中的用法
在宏中使用raiseerror的語法和使用方法和在普通T-SQL語句中是一樣的。可以通過將消息文本存儲在varchar類型的變量中來實現:
DECLARE @error_msg VARCHAR(50);
SET @error_msg = 'error message.';
RAISERROR (@error_msg ,16, 1);
GO
將內容為「error message.」的消息作為自定義的錯誤消息,severity等級為16,state為1。這樣可以很方便地完成自定義錯誤消息。
九、raiserror什麼意思
RAISERROR是T-SQL中的一條語句,作用是引發一個用戶定義的錯誤消息。它允許用戶自定義一個錯誤消息,指明出錯的等級(severity)和sql server錯誤的狀態碼(state)等信息。在開發過程中,我們會用到這個功能,這樣可以更好地定位錯誤信息,縮短錯誤排查的時間。
十、raiserror的三個參數是什麼
RAISERROR函數共有三個參數:
- msg_id:是消息的ID號
- severity:是嚴重程度等級
- state:是錯誤狀態碼
msg_id:可以是消息的ID或文字,如msg_ID ‘1’為「Divide by zero error encountered.」,msg_ID ‘50001’為用戶定義的消息等等。
severity:嚴重程度等級從1~25級,一般建議取值在16以上,比如16表示一般錯誤,18為嚴重錯誤。一般來說,值越大,代表錯誤越嚴重。
state:可以是指定的狀態碼。我們可以自己定義一些非系統預定的數字(1~255之間),來標識不同的錯誤行為。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/240165.html