我有一个场景,我需要类似于.NET's try-catch-finally block.
的东西
在我的尝试中,我将CREATE a #temp table
,INSERT
数据到它&处理其他基于#temp
的数据集。
在CATCH
上,然后在RAISERROR
上。有没有可能对DROP #temp
使用FINALLY
块?下面是伪代码:
BEGIN TRY
CREATE TABLE #temp
(
--columns
)
--Process data with other data sets
END TRY
BEGIN CATCH
EXECUTE usp_getErrorMessage
END CATCH
BEGIN FINALLY
DROP TABLE #temp
END FINALLY
发布于 2014-09-11 14:30:04
您可以只声明一个表变量(当查询结束时,该变量将自动消失),而不是创建表。
BEGIN TRY
DECLARE @temp TABLE
(
--columns
)
--do stuff
END TRY
BEGIN CATCH
--do other stuff
END CATCH
发布于 2015-07-01 21:04:35
虽然与FINALLY不完全相同,但Try-Catch的T-SQL版本确实允许在Try和Catch块之后需要执行的代码可以在end CATCH语句结束之后执行。以问题代码为例:
BEGIN TRY
CREATE TABLE #temp
(
--columns
)
--Process data with other data sets
END TRY
BEGIN CATCH
EXECUTE usp_getErrorMessage
END CATCH;
IF OBJECT_ID('tempdb..#temp') IS NOT NULL -- Check for table existence
DROP TABLE #temp;
DROP TABLE命令将执行Try或Catch。请参阅:BOL Try...Catch
发布于 2014-09-11 14:30:56
没有FINALLY
等效项。
替代方案可以是表变量,但并不完全相同,必须根据具体情况进行评估。
有一个包含详细信息的SO question,对于做出明智的选择非常有用。
使用表变量,您不需要像使用临时表那样进行清理
https://stackoverflow.com/questions/25789859
复制相似问题