我需要使用RAISERROR來拋出一條消息(彈出消息)並提交該事務。是否有任何選項?如何使用RAISERROR拋出消息並提交事務?
對於嚴重性18交易得到了rollback.I已經改變了嚴重性10,並試圖像
RAISERROR('Your Reference Number is %s',10,0,@param);
這一點,但它提交的事務,但犯規演出的消息。 我需要的是消息必須被拋出並且交易必須被提交
任何建議?
我需要使用RAISERROR來拋出一條消息(彈出消息)並提交該事務。是否有任何選項?如何使用RAISERROR拋出消息並提交事務?
對於嚴重性18交易得到了rollback.I已經改變了嚴重性10,並試圖像
RAISERROR('Your Reference Number is %s',10,0,@param);
這一點,但它提交的事務,但犯規演出的消息。 我需要的是消息必須被拋出並且交易必須被提交
任何建議?
這聽起來像你需要使用WITH NOWAIT
參數RAISERROR
- 這將輸出到立即消息窗口:
RAISERROR('Your Reference Number is %s',10,0,@param) WITH NOWAIT
不要使用異常傳回「OK」的消息。你不會在一個C#或Java程序。異常意味着 「我已經中止,因爲SHTF」
你會使用thsi返回有意義的數據
SELECT 'Your Reference Number is ' + @param
在一個典型的模板(從我的答案Nested stored procedures containing TRY CATCH ROLLBACK pattern?)
SET XACT_ABORT, NOCOUNT ON
BEGIN TRY
BEGIN TRANSACTION
[...Perform work, call nested procedures...]
COMMIT TRANSACTION
SELECT 'Your Reference Number is ' + @param
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0
ROLLBACK TRANSACTION
RAISERROR [rethrow caught error using @ErrorNumber, @ErrorMessage, etc]
END CATCH
RAISERROR嚴重性ADO.Net客戶端會將超過10的數據視爲異常。根據您的調用上下文的外觀,這可能會或可能不會回滾事務。如果您在客戶端使用SqlTransaction或TransactionScope,或者在服務器端使用BEGIN TRY/BEGIN CATCH塊,則可能會回滾該事務。要點是RAISERROR既沒有提交也沒有回滾事務,你自己的代碼是否回滾或提交,我們無法知道你在帖子中做了什麼。
RAISERROR與嚴重程度低於10將被視爲信息性消息,並不會導致例外。請參閱Database Engine Error Severities。這可能就是爲什麼你說'它不顯示信息'(無論那的含義)。客戶端框架以不同的方式處理信息性消息,例如ADO.Net將在連接上引發一個事件SqlConnection.InfoMessage
,但不會引發異常。您可能沒有在您的應用程序中爲此事件設置任何內容,並且您的代碼完全忽略了信息消息。例如如何使用InfoMessage事件請參閱Connection Events (ADO.NET)
**嚴重程度超過10的RAISERROR將被ADO視爲異常**救回我:)代碼使用嚴重性1,因此catch塊沒有被調用。 –
它正在拋出消息,但事務得到回滾 – bala3569
這就是您在原始問題中所說的** OPPOSITE **:它提交事務但不顯示消息。這是什麼? – JNK
我需要的是拋出消息並提交交易 – bala3569