2011-07-22 62 views
-3

我需要使用RAISERROR來拋出一條消息(彈出消息)並提交該事務。是否有任何選項?如何使用RAISERROR拋出消息並提交事務?

對於嚴重性18交易得到了rollback.I已經改變了嚴重性10,並試圖像

RAISERROR('Your Reference Number is %s',10,0,@param); 

這一點,但它提交的事務,但犯規演出的消息。 我需要的是消息必須被拋出並且交易必須被提交

任何建議?

回答

0

這聽起來像你需要使用WITH NOWAIT參數RAISERROR - 這將輸出到立即消息窗口:

RAISERROR('Your Reference Number is %s',10,0,@param) WITH NOWAIT

+0

它正在拋出消息,但事務得到回滾 – bala3569

+0

這就是您在原始問題中所說的** OPPOSITE **:它提交事務但不顯示消息。這是什麼? – JNK

+0

我需要的是拋出消息並提交交易 – bala3569

4

不要使用異常傳回「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 
+0

我的前端不接受這個..在那裏有任何其他選項? – bala3569

+0

@ bala3569。請告訴我們完整的代碼 – gbn

+1

「我的前端不接受這個」是什麼意思?你能詳細說明嗎? – MatBailie

5

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)

+0

**嚴重程度超過10的RAISERROR將被ADO視爲異常**救回我:)代碼使用嚴重性1,因此catch塊沒有被調用。 –