質問するログイン新規登録

質問編集履歴

1

「試したこと」の書き方を変更。回答内容を追記

2019/10/28 02:11

投稿

ponpopo
ponpopo

スコア8

title CHANGED
File without changes
body CHANGED
@@ -56,9 +56,8 @@
56
56
  RAISERROR 44444 '''SID'' フィールドでは Null 値は使えません。'
57
57
  ROLLBACK TRANSACTION
58
58
  END
59
-
60
-
59
+ ```
61
-
60
+ ```SQL
62
61
  IF (SELECT Count(*) FROM inserted WHERE SID IS NULL) > 0
63
62
  BEGIN
64
63
  RAISERROR('44444 ''SID'' フィールドでは Null 値は使えません。',16,1);
@@ -71,4 +70,18 @@
71
70
  メッセージ 515、レベル 16、状態 2、行 3
72
71
  テーブル '生産管理システム.dbo.SEIZOU' の列 'SID' に値 NULL を挿入できません。この列では NULL 値が許可されていません。UPDATE は失敗します。
73
72
 
74
- ※トリガーの判定に行かない
73
+ ※トリガーの判定に行かない
74
+
75
+ ##追記:2019/10/28
76
+ 回答から:
77
+ [RAISERROR(Transact-SQL)](https://docs.microsoft.com/en-us/sql/t-sql/language-elements/raiserror-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15)
78
+ [RAISERROR issue since migration to SQL Server 2012](https://stackoverflow.com/questions/21669227/raiserror-issue-since-migration-to-sql-server-2012)
79
+
80
+ (※ソースコードの変更点のコードを見やすく分けました)RAISERROR文は
81
+ RAISERROR( msg_str, severity ,state) の形が例文にもあるので引数の順番は大丈夫だと思うのですが
82
+ Serverityの値に細かい決まりがあった事と、例文ではTRY~CATCHの中で使っているようですので原文をどう書き直せばいいか考えてみます。
83
+
84
+ また、sys.messages カタログビューに一度登録して、RAISERROR ( msg_id ,severity ,state}のようにする方法があるようですが
85
+ こっちの方が意図した方法のような気がしました。こっちの方が書き直すのが難しそうですが…
86
+
87
+ THROW文は特にTRY~CATCHを使わなければいけないようですので、書いたことがないですが余裕ができたときに試せればと思います。