回答編集履歴

1

トリガーのサンプルを追記

2021/10/20 03:09

投稿

cx20
cx20

スコア4633

test CHANGED
@@ -13,3 +13,81 @@
13
13
  ■ 複数行のデータを処理するための DML トリガーの作成
14
14
 
15
15
  [https://docs.microsoft.com/ja-jp/sql/relational-databases/triggers/create-dml-triggers-to-handle-multiple-rows-of-data](https://docs.microsoft.com/ja-jp/sql/relational-databases/triggers/create-dml-triggers-to-handle-multiple-rows-of-data)
16
+
17
+
18
+
19
+ <追記>
20
+
21
+ 参考までにトリガーのコードを書いてみました。以下のような感じでどうでしょうか?(ちゃんと検証していないので間違いがあるかもしれません。)
22
+
23
+
24
+
25
+ ```SQL
26
+
27
+ ALTER TRIGGER [dbo].[trTest] ON [dbo].[table_1]
28
+
29
+ AFTER INSERT, UPDATE
30
+
31
+
32
+
33
+ AS
34
+
35
+ BEGIN
36
+
37
+
38
+
39
+ SET NOCOUNT ON;
40
+
41
+
42
+
43
+ --存在している場合
44
+
45
+ If EXISTS (SELECT * FROM dbo.table_2 WHERE A IN (SELECT A FROM inserted) AND (B = 1 OR B = 2))
46
+
47
+ BEGIN
48
+
49
+ --table_2を更新
50
+
51
+ UPDATE dbo.table_2
52
+
53
+ SET B = inserted.B
54
+
55
+ FROM
56
+
57
+ inserted
58
+
59
+ WHERE
60
+
61
+ table_2.A = inserted.A
62
+
63
+ AND (inserted.B = 1 OR inserted.B = 2)
64
+
65
+ END
66
+
67
+
68
+
69
+ --存在していない場合
70
+
71
+ If NOT EXISTS (SELECT * FROM dbo.table_2 WHERE A IN (SELECT A FROM inserted))
72
+
73
+ BEGIN
74
+
75
+ --table_2へインサート
76
+
77
+ INSERT INTO
78
+
79
+ dbo.table_2 (A, B)
80
+
81
+ SELECT A,B
82
+
83
+ FROM dbo.table_1
84
+
85
+ WHERE A NOT IN (SELECT A FROM dbo.table_2)
86
+
87
+ END
88
+
89
+
90
+
91
+ END
92
+
93
+ ```