kis*_*sta 30 sql t-sql sql-server
我有一个场景,我需要类似的东西 .NET's try-catch-finally block.
在我的尝试,我会CREATE a #temp table,INSERT数据,将其与过程中的其他数据集的基础上#temp.
在CATCH随后RAISERROR.有可能有FINALLY块DROP #temp吗?下面是伪代码:
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
Run Code Online (Sandbox Code Playgroud)
Dav*_*ett 25
虽然与FINALLY不完全相同,但Try-Catch的T-SQL版本确实允许在END CATCH语句结束后可以发生Try和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;
Run Code Online (Sandbox Code Playgroud)
无论Try还是Catch执行,DROP TABLE命令都将执行.请参阅:BOL尝试......捕获
Bec*_*uzz 12
您可以只声明一个表变量(在查询结束时会自动消失),而不是创建表.
BEGIN TRY
DECLARE @temp TABLE
(
--columns
)
--do stuff
END TRY
BEGIN CATCH
--do other stuff
END CATCH
Run Code Online (Sandbox Code Playgroud)
小智 5
“FINALLY”通常(但并非总是)在功能上与 TRY/CATCH 后面的“最终”代码相同(没有正式的“FINALLY”块)。不同之处在于 TRY/CATCH 块中的某些内容可能导致执行结束,例如 return 语句。
例如,我使用的模式是打开游标,然后将使用游标的代码放在 TRY 块中,并在 TRY/CATCH 块之后关闭/释放游标。如果块不会退出正在执行的代码,则此方法可以正常工作。但是,如果 TRY CATCH 块执行 RETURN(这听起来像是一个坏主意),如果有FINALLY块,它将被执行,但“最终”代码放置在 TRY / CATCH 之后,如下所示T-SQL 要求,如果这些代码块导致执行结束,则不会调用最终代码,从而可能会留下不一致的状态。
因此,虽然很多时候您可以将代码放在 TRY/CATCH 之后,但如果这些块中的任何内容可以终止而不进入清理代码,这将是一个问题。
| 归档时间: |
|
| 查看次数: |
37419 次 |
| 最近记录: |