我知道有很多关于它的决定。
然而。如果我有程序,那么在很多情况下,我想选择一个结果并退出程序。
最好使用GOTO
语句,或者有更好的方法(不是经典的if...else
)
例子:
create procedure MyProc @Parm int
as
declare @Result nvarchar(50)
set @Result = 'OK'
if @Parm = 1 begin
set @Result = 'Error Example 1'
goto ExitProc;
end
if @Parm = 2 begin
set @Result = 'Error Example 2'
goto ExitProc;
end
if @Parm = 3 begin
set @Result = 'Error Example 3'
goto ExitProc;
end
ect...
ExitProc:
select @Result as Result, 100 as P2
from Table1
最佳答案
如果您的实际代码比单个 if else if ... 结构更复杂(如评论所述),那么您可以在需要时引发自己的异常,强制存储过程退出并通知您的应用程序的错误。
示例:
create procedure MyProc @Parm int
as
if @Parm = 1 begin
THROW 60001, 'Error Example 1', 1;
end
if @Parm = 2 begin
THROW 60001, 'Error Example 2', 2;
end
if @Parm = 3 begin
THROW 60001, 'Error Example 3', 3;
end
...
现在您的应用程序可以捕获 SQL Server 抛出的这些异常,就好像它们是任何其他 SQL 错误一样。
您甚至可以在存储过程本身上捕获并处理这些错误,尽管我认为在您的应用程序上捕获它们更为优雅。
捕捉存储过程错误的例子:
create procedure MyProc @Parm int
as
begin try
if @Parm = 1 begin
THROW 60001, 'Error Example 1', 1;
end
if @Parm = 2 begin
THROW 60001, 'Error Example 2', 2;
end
if @Parm = 3 begin
THROW 60001, 'Error Example 3', 3;
end
...
end try
begin catch
select error_message() as Result, 100 as P2
from Table1
end catch
关于sql-server - SqlServer GOTO 用于带有选择的退出过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43975901/