web-dev-qa-db-ja.com

SQL Serverトリガーを作成して、あるテーブルからレコードをコピーし、別のテーブルに入力する

あるテーブルからレコードをコピーし、挿入または更新後に別のテーブルに入力するトリガーを作成したいと思います。ユーザーが検査表に日付を入力すると、その日付が資産表の日付列に挿入または更新されます。私はSQLとT-SQLの初心者で、以前にトリガーを作成したことがありません。この設定を取得する方法についてのガイダンスをいただければ幸いです。

これはより良い説明です:

トリガーを作成するテーブルの名前は[Inspections]です。ユーザーはこのテーブルに新しいレコードを追加し、その行にDateInspected値を含めます。トリガーで[Inspections]からその新しいDateInspected値を取得し、[Hydrants]というテーブルの既存の値を更新する必要があります。

[Inspections]テーブルと[Hydrants]テーブルには、[Id]という主キーがあります。トリガーが[Hydrants]テーブルの正しい既存のレコードを更新していることを確認するにはどうすればよいですか?

3
user19300

はい、新しく追加した情報に基づいた私の更新です。トリガーのマージステートメントは、新しく追加されたレコードが消火栓に挿入されることを保証します。それ以外の場合、検査と消火栓の間に存在するレコードは、検査が更新されるときに消火栓で更新されます。

挿入と更新を実行すると(以下の表とトリガーの作成後)、検査表の行挿入が消火栓に挿入されているのに対して、検査に対する行の更新は消火栓でも更新されていることがわかります。

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
3
Sting