あるテーブルからレコードをコピーし、挿入または更新後に別のテーブルに入力するトリガーを作成したいと思います。ユーザーが検査表に日付を入力すると、その日付が資産表の日付列に挿入または更新されます。私はSQLとT-SQLの初心者で、以前にトリガーを作成したことがありません。この設定を取得する方法についてのガイダンスをいただければ幸いです。
これはより良い説明です:
トリガーを作成するテーブルの名前は[Inspections]
です。ユーザーはこのテーブルに新しいレコードを追加し、その行にDateInspected
値を含めます。トリガーで[Inspections]
からその新しいDateInspected
値を取得し、[Hydrants]
というテーブルの既存の値を更新する必要があります。
[Inspections]
テーブルと[Hydrants]
テーブルには、[Id]
という主キーがあります。トリガーが[Hydrants]
テーブルの正しい既存のレコードを更新していることを確認するにはどうすればよいですか?
はい、新しく追加した情報に基づいた私の更新です。トリガーのマージステートメントは、新しく追加されたレコードが消火栓に挿入されることを保証します。それ以外の場合、検査と消火栓の間に存在するレコードは、検査が更新されるときに消火栓で更新されます。
挿入と更新を実行すると(以下の表とトリガーの作成後)、検査表の行挿入が消火栓に挿入されているのに対して、検査に対する行の更新は消火栓でも更新されていることがわかります。
create table Inspections
(
PK int identity(1,1),
MyDate date
)
go
create table Hydrants
(
PK int,
MyDate date
)
Go
CREATE TRIGGER MyTrigger
ON Inspections
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;
MERGE INTO Hydrants as Target
USING inserted as Source
ON (TARGET.PK = SOURCE.PK)
WHEN MATCHED THEN
UPDATE SET TARGET.MyDate = SOURCE.MyDate
WHEN NOT MATCHED BY TARGET THEN
INSERT (PK, MyDate)
VALUES (SOURCE.PK,SOURCE.MyDate);
END
GO
insert into Inspections(Mydate) values('01/10/2016')
select * from Hydrants
update Inspections set Mydate = '02/10/2016' where PK =1
select * from Hydrants