今回は SQL Server にて以下のようなエラーが表示される場合の対応方法について覚え書きします。
【エラーその1】
'Throw' 付近に不適切な構文があります。
【エラーその2】
'Throw' 付近に不適切な構文があります。次が必要です: CONVERSATION、DIALOG、DISTRIBUTED、またはTRANSACTION.
前提条件
・Windows 7 professional 以降 / Windows Server 2008 R2 以降
・SQL Server 2012 Developer / Standard / Enterprise 以降
1.原因
【エラーその1の場合】
Throw は SQL Server 2012 以降に対応された機能となりますので、SQL Server 2008 以前では使用することができません。
【エラーその2の場合】
BEGIN CATCH ~ END CATCH の内部で Throw を使用する場合は発生しません。
BEGIN ~ END の内部で Throw を使用する場合、BEGIN のすぐ後に記述するとエラー表示がされます。
私はSQL Server のバグだと考えております。
2.対応方法
【エラーその1の場合】
代わりに RAISERROR を使用します。
実際の記述サンプルは以下の通りです。
BEGIN
RAISERROR(N'Message', 16, 1);
END;
【エラーその2の場合】
BEGIN ~ END の内部にダミー行を設けます。といっても「;」(セミコロン)をひとつ追加するだけです。
実際の記述サンプルは以下の通りです。
BEGIN
SET NOCOUNT ON;
BEGIN TRY
IF 1 = 1
BEGIN
; --先にセミコロンが必要
THROW 50001, 'Message', 1;
--セミコロンを記述して2行目にTHROWを記述すると
--エラー表示がなくなります。
END;
END TRY
BEGIN CATCH
--THROW 50001, 'Message', 1;
THROW;
END CATCH;
END;
最後までお読みいただき、ありがとうございます。
他にも SQL Server に関する記事をご紹介しておりますのでご参考頂ければ幸いです。
- 関連記事
-