首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server尝试最终捕获

SQL Server尝试最终捕获
EN

Stack Overflow用户
提问于 2014-09-11 22:17:47
回答 7查看 52.3K关注 0票数 38

我有一个场景,我需要类似于.NET's try-catch-finally block.的东西

在我的尝试中,我将CREATE a #temp tableINSERT数据到它&处理其他基于#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
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2014-09-11 22:30:04

您可以只声明一个表变量(当查询结束时,该变量将自动消失),而不是创建表。

BEGIN TRY
DECLARE @temp TABLE
(
    --columns
)
--do stuff
END TRY
BEGIN CATCH
--do other stuff
END CATCH
票数 14
EN

Stack Overflow用户

发布于 2015-07-02 05: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

票数 36
EN

Stack Overflow用户

发布于 2014-09-11 22:30:56

没有FINALLY等效项。

替代方案可以是表变量,但并不完全相同,必须根据具体情况进行评估。

有一个包含详细信息的SO question,对于做出明智的选择非常有用。

使用表变量,您不需要像使用临时表那样进行清理

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25789859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档