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

質問編集履歴

6

編集

2021/10/20 02:07

投稿

Chandler_Bing
Chandler_Bing

スコア673

title CHANGED
File without changes
body CHANGED
@@ -95,7 +95,33 @@
95
95
  ```
96
96
 
97
97
  ```ここに言語を入力
98
+ --テーブル定義(table_1、tqble_2、wk_table_1)
99
+ USE [XXXXXX]
100
+ GO
101
+
102
+ /****** Object: Table [dbo].[table_1] Script Date: 2021/10/19 16:12:37 ******/
103
+ SET ANSI_NULLS ON
104
+ GO
105
+
106
+ SET QUOTED_IDENTIFIER ON
107
+ GO
108
+
109
+ CREATE TABLE [dbo].[table_1](
110
+ [A] [varchar](50) NOT NULL,
111
+ [B] [int] NULL,
112
+ CONSTRAINT [PK_table_1] PRIMARY KEY CLUSTERED
113
+ (
114
+ [A] ASC
115
+ )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
116
+ ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
117
+ GO
118
+
119
+ ALTER TABLE [dbo].[table_1] ADD CONSTRAINT [DF_table_1_B] DEFAULT (0) FOR [B]
120
+ GO
121
+
122
+
98
123
  --テストデータ
99
124
  insert into dbo.wk_table_1
100
125
  values ('00001', 1); --A(主キー), B
126
+ values ('00002', 2); --A(主キー), B
101
127
  ```

5

編集

2021/10/20 02:07

投稿

Chandler_Bing
Chandler_Bing

スコア673

title CHANGED
File without changes
body CHANGED
@@ -92,4 +92,10 @@
92
92
 
93
93
  insert into [dbo].[table_1]
94
94
  select * from [dbo].[wk_table_1]; --トリガー発火のためレコードを挿入
95
+ ```
96
+
97
+ ```ここに言語を入力
98
+ --テストデータ
99
+ insert into dbo.wk_table_1
100
+ values ('00001', 1); --A(主キー), B
95
101
  ```

4

編集

2021/10/20 01:37

投稿

Chandler_Bing
Chandler_Bing

スコア673

title CHANGED
File without changes
body CHANGED
@@ -64,4 +64,32 @@
64
64
  トリガーが仕込んである、table_1に一気に2件レコードを追加しても1回しかトリガーが実行されていない
65
65
  (PRINTが1回しかコンソールに表示されませんでした。。。。)
66
66
 
67
- どうかご教授のほどよろしくお願いします。
67
+ どうかご教授のほどよろしくお願いします。
68
+
69
+ ```SQL
70
+ --回答を参考にソースを修正
71
+ CREATE TRIGGER trTest ON table_1
72
+ AFTER INSERT, UPDATE
73
+
74
+ AS
75
+ BEGIN
76
+
77
+ --トリガ内で処理された行数を示すメッセージが結果セットの一部として返されないようにします。
78
+ SET NOCOUNT ON;
79
+
80
+ UPDATE table_2
81
+ SET B = (SELECT B
82
+ FROM inserted
83
+ WHERE table_2.A
84
+ = inserted.A)
85
+ WHERE table_2.A IN
86
+ (SELECT A FROM inserted);
87
+
88
+ END
89
+
90
+
91
+ delete from [dbo].[table_1]; --全削除
92
+
93
+ insert into [dbo].[table_1]
94
+ select * from [dbo].[wk_table_1]; --トリガー発火のためレコードを挿入
95
+ ```

3

編集

2021/10/20 00:29

投稿

Chandler_Bing
Chandler_Bing

スコア673

title CHANGED
@@ -1,1 +1,1 @@
1
- SQL Server トリガー
1
+ SQL Server トリガーの複数行更新(挿入)
body CHANGED
File without changes

2

編集

2021/10/19 14:44

投稿

Chandler_Bing
Chandler_Bing

スコア673

title CHANGED
File without changes
body CHANGED
@@ -34,7 +34,6 @@
34
34
  END
35
35
  --存在していない場合
36
36
  ELSE
37
- PRINT 'table_2へインサート'
38
37
  BEGIN
39
38
  --table_2へインサート
40
39
  INSERT INTO

1

編集

2021/10/19 14:43

投稿

Chandler_Bing
Chandler_Bing

スコア673

title CHANGED
File without changes
body CHANGED
@@ -59,16 +59,10 @@
59
59
  table_1.Aとtable_2.Aが同じレコードがなければ、
60
60
  table_1のレコードをtable_2のインサートする
61
61
 
62
- 現在以下二つの問題があります。
62
+ 現在以の問題があります。
63
63
 
64
64
  ★問題1★
65
65
  トリガーが仕込んである、table_1に一気に2件レコードを追加しても1回しかトリガーが実行されていない
66
66
  (PRINTが1回しかコンソールに表示されませんでした。。。。)
67
67
 
68
-
69
- ★問題2★
70
- PRINT @VarA以降が処理されてません。
71
- table_1にレコードがない状態でtable_1に値をインサートするとELSEに来るはずですが、IFにすらきてません。
72
- 書き方が悪いでしょうか?→コンパイルには成功してます。
73
-
74
68
  どうかご教授のほどよろしくお願いします。