私はこのようなことを試してみます:
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単一の行しか含まれていないと仮定しないでください。その仮定は完全に誤りです。