如果您尝试在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
答案 0 :(得分:1)
SQL Server将结果传输到客户端。想象一下10亿行查询。结果不会被缓冲,而是在可用时进行流式处理。
SQL Server启动了流式传输,然后才发现错误,因为错误是在执行查询计划时发生的。
将查询结果插入临时表,并且只有在未捕获错误时才选择该临时表的内容。
答案 1 :(得分:-1)
请阅读下面有关msdn:http://msdn.microsoft.com/en-IN/library/ms175976.aspx
的文章这是因为try-catch不在任何存储过程中,并且不会达到较低的执行级别。