質問編集履歴
6
編集
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
編集
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
編集
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
編集
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
SQL Server トリガー
|
1
|
+
SQL Server トリガーの複数行更新(挿入)
|
body
CHANGED
File without changes
|
2
編集
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
編集
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
|
どうかご教授のほどよろしくお願いします。
|