1

こんにちは、私はまだ SQL に慣れていません。少し問題があり、誰かが助けてくれるかもしれません。

トリガーについてすべて調査しましたが、読んだ内容は理にかなっていますが、何らかの理由で必要な答えが得られないため、何をする必要があるかを説明します

私は2つのテーブルを持っていますProductsLabelPrint

5productsつの列がありますupc, itemcode, description, price, labelprint

同じLabelPrint列があります

必要なのは、新しいアイテムが作成されたとき、または古いアイテムが編集され、列LabelPrintが「はい」の場合 =1 に変更されたときのトリガーです

問題のアイテムをlabelprintテーブルにコピーする必要があります

一定期間が経過すると、テーブルからこのlabel printアイテムが自動的に消去されます。このトリガーを希望どおりに機能させる方法を理解するために、誰かが助けてくれることを願っています

ありがとうブランドン

4

1 に答える 1

0

私はこのようなことを試してみます:

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.Productslabelprint列が に設定されている場合は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単一の行しか含まれていないと仮定しないでください。その仮定は完全に誤りです。

于 2012-08-22T16:51:28.337 に答える