私のプロジェクトでは、既存のテーブルをさらにいくつかの列で拡張する必要がありました。残念ながら、それを変更またはドロップ/再作成することはできないため、1:1 の関係を持つ別のテーブルを作成し、挿入/更新/削除トリガーを使用してビューにマージすることを選択しました。
これまでのところ、挿入と削除は機能しますが、Update-Trigger に問題があります。成功メッセージはさらに混乱を招きます。
ビューは次のようになります。
Create View [dbo].[JoinedGroups] as
SELECT [dbo].[MaterialGroups].[GroupID]
,[Name]
,[SupGroup_ID]
,[ExtGroup_ID]
FROM [dbo].[MaterialGroups]
left outer join [dbo].[MaterialGroups_Extend]
ON [dbo].[MaterialGroups].[GroupID]=[dbo].[MaterialGroups_Extend].[GroupID]
前述のように、新しい追加のテーブルはまだ埋められていません。それが左外部結合の理由ですが、別のアイデアがあれば教えてください。
引き金:
CREATE TRIGGER [dbo].[UpdateTriggerJG] ON [dbo].[JoinedGroups]
INSTEAD OF Update
AS
BEGIN
IF EXISTS (SELECT * FROM [dbo].[MaterialGroups_Extend] E,inserted I WHERE E.[GroupID] = I.[GroupID])
BEGIN
UPDATE [dbo].[MaterialGroups_Extend]
SET [SupGroup_ID] = I.[SupGroup_ID]
,[ExtGroup_ID] = I.[ExtGroup_ID]
FROM [Buran].[dbo].[MaterialGroups_Extend] E,inserted I
WHERE E.[GroupID] = I.[GroupID]
END
ELSE
BEGIN
INSERT INTO [dbo].[MaterialGroups_Extend]
([GroupID]
,[SupGroup_ID]
,[ExtGroup_ID])
SELECT [GroupID]
,[SupGroup_ID]
,[ExtGroup_ID]
FROM inserted
END
UPDATE [dbo].[MaterialGroups]
SET [dbo].[MaterialGroups].[Name] = I.Name
FROM [dbo].[MaterialGroups],inserted I
WHERE [dbo].[MaterialGroups].[GroupID] = I.[GroupID]
次のようなステートメント:
UPDATE [dbo].[JoinedGroups]
SET
[SupGroup_ID] = 1
,[ExtGroup_ID] = 1
次の出力が得られます。
(2 row(s) affected)
(23 row(s) affected)
(23 row(s) affected)
[MaterialGroups] には 23 行のデータが含まれています [MaterialGroups_Extend] には 2 行のデータが含まれています ビューにも 23 行あります。
しかし、なぜ何も挿入されていないのですか?私は何か間違ったことをしていますか、それとも何かを忘れていますか?