私はこのようなことを試してみます:
CREATE TRIGGER InsertProducts
ON dbo.Products
FOR INSERT
AS
INSERT INTO dbo.LabelPrint(upc, itemcode, description, price, labelprint)
SELECT
upc, itemcode, description, price, labelprint
FROM Inserted
WHERE labelprint = 1
この最初のトリガーは、テーブルにデータを挿入するたびに起動しdbo.Products
、labelprint
列が に設定されている場合は1
、それらの行も に挿入さdbo.LabelPrint
れます。
はUPDATE
少しトリッキーです:
CREATE TRIGGER UpdateProducts
ON dbo.Products
FOR UPDATE
AS
INSERT INTO dbo.LabelPrint(upc, itemcode, description, price, labelprint)
SELECT
i.upc, i.itemcode, i.description, i.price, i.labelprint
FROM Inserted i
INNER JOIN Deleted d ON i.itemcode = d.itemcode
WHERE i.labelprint = 1 AND d.labelprint <> 1
itemcode
ここで、行が更新されていることを確認します (古い値と新しい値をリンクするために使用するのに最適な列であるかどうかは 100% 確実ではありません。そうでない場合は、必要に応じて調整します)。Deleted
疑似テーブル) は1
新しい値 (からInserted
) ではありません1
。その場合、列LabelPrint
は 1 に更新され、その行はテーブルにコピーされLabelPrint
ます。
1 つの注意点: SQL Server は、挿入または更新される行ごとにトリガーを起動しないことに注意する必要があります。トリガーはステートメントごとに 1 回起動します。その 1 つのステートメントで 50 行を更新することもできます。その場合、トリガーは1 回起動し、トリガー内の疑似テーブル ( Inserted
, Deleted
) にはそれぞれ 50 行が含まれます。Inserted
単一の行しか含まれていないと仮定しないでください。その仮定は完全に誤りです。