1

エラーを返すことができるストアドプロシージャがあります。この例では、常にエラーが返されます。

create proc regresaerror
as
begin
 raiserror 51001 'Error al borrar los precios especiales' 
end

declare @error varchar(max)
set @error=''
begin try
set @error=exec regresaerror
end try
begin catch
end catch

私はそれを試しましたが(一時テーブルにこのエラーを挿入する必要があるため)、そのブロックコードはこのエラーを取得します

メッセージ156、レベル15、状態1、行4
キーワード「exec」の近くの構文が正しくありません。

出力変数を追加するためにストアドプロシージャを更新できませんでした

では、どうすればエラーをキャッチできますか?

4

1 に答える 1

1

最初の解決策:

BEGIN TRY
    EXECUTE regresaerror
END TRY
BEGIN CATCH
    SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_MESSAGE() AS ErrorMessage;
END CATCH;

ここにMSDNへのリンクがあります。

2番目の解決策:

create proc regresaerror 
(
  errmsg varchar(max) out
)
as
begin
 set errmsg =  'Error al borrar los precios especiales' 
 return 51001 -- if error
end 

declare @error varchar(max)
declare @numerror int
set @error=''   
exec @numerror = regresaerror @error out
于 2012-10-03T22:00:25.223 に答える