【问题标题】:TRY CATCH in SQL Server在 SQL Server 中尝试 CATCH
【发布时间】:2010-10-26 13:30:19
【问题描述】:

我使用的是 SQL Server 2008。我尝试执行以下操作:

BEGIN TRY
    SELECT 1/0;
END TRY
BEGIN CATCH
    PRINT 'ERROR'
END CATCH;

但我收到以下错误:

>Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near 'TRY'.
Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'END'.

谁能告诉我如何在 SQL Server 中执行 try catch?

【问题讨论】:

  • 我在 SQL 2008 中没有收到错误
  • 我也可以运行未经编辑的代码,SQL 2005。
  • 查询窗口中是否还有其他可能正在执行的内容?
  • 真的使用 SQL Server 2008 吗?此错误消息“闻起来”就像您尝试在例如SQL Server 2000 还没有这个功能......
  • @marc_s 是的,你是对的。我的版本错了。对不起。

标签: sql-server sql-server-2008 try-catch


【解决方案1】:

对于 SQL Server 2005 及更高版本,这是一个完全有效的语句,所以我会使用 sp_dbcmptlevel (Transact-SQL) 检查您的兼容性级别:

exec sp_dbcmptlevel 'YourDatabaseName'

80 = SQL Server 2000
90 = SQL Server 2005
100 = SQL Server 2008

我认为它会返回80或更低,它似乎不知道BEGIN TRY,只知道BEGINBEGIN TRY 是在 SQL Server 2005 中添加的。

【讨论】:

  • @Jeeva Jsb,如果您确定兼容模式,请创建一个新问题并发布您的代码
【解决方案2】:

如果你仍然有这个错误,那么问题就变成了,你有没有把 BEGIN CATCH...END CATCH 部分放进去。如果没有,你会得到这个错误。如果你有一个 BEGIN TRY...END TRY 部分没有 T-SQL 代码,那么它也会产生错误。

我认为人们告诉您您使用的是 SQL Server 2000 对您没有帮助。这很可能是 T-SQL 编码问题,因为您往往知道自己在运行什么服务器。

【讨论】:

    【解决方案3】:
    Begin try
      Begin transaction
        --------
        --------
      Commit transaction
    End try
    Begin catch
      Rollback transaction
    End catch
    

    http://intquesans.blogspot.com/2011/05/how-we-can-use-try-catch-in-sql.html

    【讨论】:

    • 就我而言,我将Begin Transaction 放在Begin Try 之前,但Commit Transaction 放在Try 块内。这个答案向我展示了我做错了什么。
    猜你喜欢
    • 1970-01-01
    • 2014-12-22
    • 2012-02-26
    • 2017-02-13
    • 1970-01-01
    • 2015-10-04
    • 2010-12-25
    • 2011-07-05
    • 1970-01-01
    相关资源
    最近更新 更多