我想在存储过程中使用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
答案 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
运行?