1

大家好,我对 SQL 还是有点陌生​​,我有一个小问题,也许有人可以帮忙。

我已经研究了所有关于触发器和我读到的有意义的东西,但由于某种原因我无法从中得到我需要的答案,所以我将解释我需要做什么

我有 2 张桌子ProductsLabelPrint

里面有products5列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

每当您将数据插入 table 时,都会触发第一个触发器dbo.Products,如果labelprint​​ column 设置为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

在这里,我检查该行是否已更新(不是 100% 确定是否itemcode是用于链接旧值和新值的最佳列 - 如果不是,则根据需要进行调整),并确保旧值(来自Deleted伪表)不是1,而新值(来自Inserted)是1- 在这种情况下,列LabelPrint已更新为 1,并且该行将被复制到LabelPrint表中。

提醒一句:您需要注意 SQL Server 不会正在插入和/或更新的每一行触发触发器。触发器将为每个语句触发一次- 一个语句可以很好地更新 50 行 - 在这种情况下,触发器会触发一次Inserted,并且触发器 ( , )内的伪表Deleted每个将包含 50 行。只是永远不要假设Inserted只包含一行 - 这种假设是完全错误的。

于 2012-08-22T16:51:28.337 回答