即使发生错误,TRY CATCH内的SELECT查询也会返回空结果集

时间:2014-06-25 10:44:39

标签: sql sql-server select exception-handling

如果您尝试在MS SQL Server中运行以下查询,您将看到两个结果集作为输出。我想知道SELECT语句仍然返回结果集的原因,即使发生错误以及如何在发生错误时将其删除。因为您可能会看到,我试图返回另一个带有错误消息的结果集。

BEGIN TRY
    SET NOCOUNT ON;

    --invoke divide by zero error
    SELECT 1 / 0 AS DIVZEROERROR

END TRY

BEGIN CATCH
    SELECT ERROR_MESSAGE() AS ERRRORMESSAGE;
END CATCH

2 个答案:

答案 0 :(得分:1)

SQL Server将结果传输到客户端。想象一下10亿行查询。结果不会被缓冲,而是在可用时进行流式处理。

SQL Server启动了流式传输,然后才发现错误,因为错误是在执行查询计划时发生的。

将查询结果插入临时表,并且只有在未捕获错误时才选择该临时表的内容。

答案 1 :(得分:-1)

请阅读下面有关msdn:http://msdn.microsoft.com/en-IN/library/ms175976.aspx

的文章

这是因为try-catch不在任何存储过程中,并且不会达到较低的执行级别。