SQL Server中的TRY CATCH

8

我正在使用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吗?


1
我在 SQL 2008 中没有收到错误信息。 - Brad
1
我也能够在未经编辑的情况下运行这段代码,SQL 2005。 - Fosco
你的查询窗口里还有其他可能正在执行的内容吗? - Oded
1
你真的在使用SQL Server 2008吗??这个错误信息“闻起来”像是你试图在例如还没有此功能的SQL Server 2000上使用它.... - marc_s
@marc_s 是的,你是对的。我版本搞错了。对不起大家。 - ANP
3个回答

9

这是对于 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,如果你确定兼容模式没问题,那么请创建一个新问题并发布你的代码。 - KM.
Azure专用SQL池出现错误... 存储过程sp_dbcmptlevel不存在或不受支持。 - Scott Stensland

2

在我的情况下,我在 Begin Try 之前放置了 Begin Transaction,但是在 Try 块内部放置了 Commit Transaction。这个答案向我展示了我的错误。 - Codes with Hammer

2
如果您仍然遇到此错误,则问题是,您是否放置了BEGIN CATCH...END CATCH部分。如果没有,您将收到此错误。如果您有一个BEGIN TRY... END TRY部分,但其中没有任何T-SQL代码,则也会产生错误。
我认为告诉您正在使用SQL Server 2000并没有什么帮助。更有可能是T-SQL编码问题,因为您往往知道自己正在运行的服务器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接