SQL Server 2008 R2 Management Studioは、以下の例で私のスローを認識しません、と述べています
throwの近くの不正な構文
ここでエラーをスローしようとしているので、誰かが同じ値を2回挿入したときに自分のWebサイトで処理できます。
Begin Try
insert into BusinessID (BusinessID) values (@ID)
insert into BusinessID (BusinessID) values (@ID)
End Try
Begin Catch
Print 'PK already exist'
THROW
End Catch
THROW
ステートメントはSQL Server 2012で導入されました
http://msdn.Microsoft.com/en-us/library/ee677615.aspx
代わりにRAISERROR
を使用できます。
http://msdn.Microsoft.com/en-us/library/483588bd-021b-4eae-b4ee-216268003e79(v = sql.105)
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
END CATCH;
SQLブロックでThrowの代わりに [〜#〜] raiserror [〜#〜] を使用します。
Begin Try
insert into BusinessID (BusinessID) values (@ID)
insert into BusinessID (BusinessID) values (@ID)
End Try
Begin Catch
Print 'PK already exist'
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
-- Use RAISERROR inside the CATCH block to return error
-- information about the original error that caused
-- execution to jump to the CATCH block.
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
End Catch