2013-02-07 137 views
1

我有一些SQL:只返回最後一批在try..catch

BEGIN TRY 
    DECLARE @RowsInserted int; 
    SET @RowsInserted = @@ROWCOUNT; 
    SELECT @RowsInserted+'test' as [SUCCESS]; 
END TRY 

BEGIN CATCH  
    SELECT ERROR_MESSAGE() AS [ERROR]  
END CATCH 

令我驚訝的是,這實際上會產生兩個批次(數據集):

enter image description here

我可以」由於TRY...CATCH的工作方式,請使用GO來拆分批次。那麼這是否意味着如果發現一些錯誤,總會有一些虛擬結果集?

我真的很想做的就是扔掉SUCCESS批次(或其他被捕獲的這樣的虛擬批次)。否則,我將不得不瀏覽一些垃圾批來查找catch語句中的錯誤報告批處理,這似乎令人困惑。

回答

0

我不認爲這是可能的 - 在枚舉開始之前以及在可能知道任何記錄評估將產生錯誤之前,將結果集的引用返回給客戶端。

2

你需要在catch塊中做什麼提高出錯而不是選擇吧。

BEGIN CATCH 
    -- rethrow error 
    DECLARE @ErrorMessage NVARCHAR(4000) = ERROR_MESSAGE() 
    DECLARE @ErrorSeverity INT = ERROR_SEVERITY() 
    DECLARE @ErrorState INT = ERROR_STATE() 

    RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState) 
END CATCH 

有一個分離有:結果集(select)是精神疾病爲數據,而錯誤(raiserror)是精神疾病進行通信故障。

+0

有趣。我想知道爲什麼在catch塊中使用'select'的'TRY ... CATCH'有很多[示例](http://msdn.microsoft.com/zh-cn/library/ms175976.aspx)。 – user17753