以下の内容はhttps://memorandom-nishi.hatenablog.jp/entry/2017/07/17/004500より取得しました。


【SQL Server】T-SQLのtry catch について

ストアドプロシージャを書く際にエラー処理を書くかと思いますが、例外をスローするためのサンプルを掲載します。

Googleで検索するとやたらRAISERRORを使ったサンプルが検索にヒットしますが、SQLserver2012以降を使っている場合なら単純にTHROWすればよいかと。

サンプルとしてEMPLOYEESテーブルを更新するストアドを作成します。

/*********************************************/
-- try catchのサンプル
/*********************************************/
  USE sales
  GO

  DROP PROCEDURE IF EXISTS dbo.usp_throw_test;
  GO

  CREATE PROCEDURE dbo.usp_throw_test
    @Employee_id INT,
    @Salary INT
  AS
  BEGIN
  SET NOCOUNT ON;
    BEGIN TRY
      BEGIN TRAN;
        SELECT *
        FROM [dbo].[EMPLOYEES] WITH (UPDLOCK)
        WHERE  EMPLOYEE_ID = @Employee_id

        UPDATE [dbo].[EMPLOYEES]
        SET SALARY = @Salary
        WHERE  EMPLOYEE_ID = @Employee_id

      COMMIT TRAN;
    END TRY
    BEGIN CATCH
      IF @@TRANCOUNT > 0
      ROLLBACK TRAN;
      THROW;
    END CATCH
  END
  GO

テーブルにはCHECK制約としてsalary>0という条件を制約とします。

	ALTER TABLE [dbo].[EMPLOYEES]  WITH NOCHECK 
	ADD  CONSTRAINT [EMP_SALARY_MIN] CHECK  (([salary]>(0)))
	GO

	ALTER TABLE [dbo].[EMPLOYEES] CHECK CONSTRAINT [EMP_SALARY_MIN]
	GO

エラーを発生させると例外がスローされます。

EXEC dbo.usp_throw_test
  @Employee_id = 103,
  @Salary =  -15000

f:id:utiowa:20170717000242p:plain




以上の内容はhttps://memorandom-nishi.hatenablog.jp/entry/2017/07/17/004500より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14