如果以前的语句错误,则try语句的正确语法执行此操作

时间:2018-03-20 16:16:47

标签: sql sql-server

我想在存储过程中使用control-of-flow语句:

begin try
 sql_statement
end try
begin try
 sql statement
end try
begin catch
 print error
end catch

但是试试看的documentation说:

  

TRY块必须紧跟一个关联的CATCH块。   包括END TRY和BEGIN CATCH之间的任何其他陈述   语句生成语法错误。

这在sql中的正确语法是什么:

execute x_sql_statement
if x_sql_statement errors
execute y_sql_statement
else end

2 个答案:

答案 0 :(得分:1)

通常是这样的

begin try

    execute x_sql_statement

end try
begin catch

    execute y_sql_statement

end catch

答案 1 :(得分:1)

如果你开始TRY,结束它,然后开始另一个TRY,则会出现上述问题。错误信息在字面上告诉你这里的问题:

  

TRY块必须紧跟一个关联的CATCH块

也许做这样的事情......?

DECLARE @Error bit = 0;

BEGIN TRY
    execute x_sql_statement;
END TRY
BEGIN CATCH
    SET @Error = 1;
    execute y_sql_statement;
END CATCH

IF @Error = 0 BEGIN
    execute z_sql_statement;
END

但是,为什么不这样做......

BEGIN TRY
    execute x_sql_statement;
    execute z_sql_statement;
END TRY
BEGIN CATCH
    execute y_sql_statement;
END CATCH

除非y失败,否则您不希望语句z运行?