SQL Server におけるトランザクションとエラー処理
Miriam Antona
Software Engineer
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
Msg 2627, Level 14, State 1, Line 1
UNIQUE KEY 制約 'unique_name' の違反。
オブジェクト 'dbo.products' に重複したキーを挿入できません。
重複したキーの値は (Trek Powerfly 5 - 2018) です。
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
SELECT 'Product inserted correctly!' AS message;
END TRY
BEGIN CATCH
SELECT 'An error occurred! You are in the CATCH block' AS message;
END CATCH
| message |
|-----------------------------------------------|
| An error occurred! You are in the CATCH block |
ERROR_NUMBER() はエラー番号を返します。
ERROR_SEVERITY() はエラー重大度 (11-19) を返します。
ERROR_STATE() はエラー状態を返します。
ERROR_LINE() はエラーの行番号を返します。
ERROR_PROCEDURE() はストアドプロシージャ/トリガー名を返します。存在しない場合は NULL。
ERROR_MESSAGE() はエラーメッセージ本文を返します。
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() AS Error_number,
ERROR_SEVERITY() AS Error_severity,
ERROR_STATE() AS Error_state,
ERROR_PROCEDURE() AS Error_procedure,
ERROR_LINE() AS Error_line,
ERROR_MESSAGE() AS Error_message;
END CATCH
| Error_number| Error_severity| Error_state| Error_procedure| Error_line| Error_message |
|-------------|---------------|------------|----------------|-----------|-----------------------------------------------------|
| 2627 | 14 | 1 | NULL | 2 | Violation of UNIQUE KEY constraint 'unique_name'... |
直前の出力
| Error_number| Error_severity| Error_state| Error_procedure| Error_line| Error_message |
|-------------|---------------|------------|----------------|-----------|-----------------------------------------------------|
| 2627 | 14 | 1 | NULL | 2 | Violation of UNIQUE KEY constraint 'unique_name'... |
元のエラー情報
Msg 2627, Level 14, State 1, Line 1
UNIQUE KEY 制約 'unique_name' の違反。重複したキーをオブジェクト 'dbo.products' に挿入できません。重複キーの値は (Trek Powerfly 5 - 2018) です。
SELECT ERROR_NUMBER() AS Error_number,
ERROR_SEVERITY() AS Error_severity,
ERROR_STATE() AS Error_state,
ERROR_PROCEDURE() AS Error_procedure,
ERROR_LINE() AS Error_line,
ERROR_MESSAGE() AS Error_message;
| Error_number | Error_severity | Error_state | Error_procedure | Error_line | Error_message |
|--------------|----------------|-------------|-----------------|------------|---------------|
| NULL | NULL | NULL | NULL | NULL | NULL |
BEGIN TRY
INSERT INTO products (product_name, stock, price)
VALUES ('Trek Powerfly 5 - 2018', 10, 3499.99);
END TRY
BEGIN CATCH
BEGIN TRY
INSERT INTO myErrors
VALUES ('ERROR!')
END TRY
BEGIN CATCH
SELECT 'Outer CATCH block' AS 'Error_from',
ERROR_NUMBER() AS Error_number,
ERROR_MESSAGE() AS Error_message;
END CATCH
END CATCH
| Error_from | Error_number | Error_message |
|-------------------|--------------|-------------------------------------------|
| Outer CATCH block | 8152 | String or binary data would be truncated. |
SQL Server におけるトランザクションとエラー処理