大家好,我仍然是SQL的新手,我有一个小问题,也许有人可以提供帮助。
我已经研究了所有关于触发器的内容以及我读到的内容是有道理的,但由于某些原因我无法得到它所需要的答案所以我将解释我需要做什么
我有两张桌子Products
,LabelPrint
在products
中有5列upc, itemcode, description, price, labelprint
在LabelPrint
中有相同的列
我需要的是一个触发器,用于创建新项目或编辑旧项目,并将列LabelPrint
修改为= 1表示是
我需要将相关项目复制到labelprint
表格
label print
表会在一段时间后自动清除这些项目,我希望有人可以帮助我理解如何让这个触发器以我希望的方式工作
感谢brandon
答案 0 :(得分: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.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
在这里,我检查该行是否已更新(不是100%确定itemcode
是否是用于链接旧值和新值的最佳列 - 如果不是,则根据需要进行调整),然后我确保旧值(来自Deleted
伪表)不是1
而新值(来自Inserted
)是1
- 在这种情况下,列{ {1}}已更新为1,该行将被复制到LabelPrint
表中。
需要注意的一点是:您需要注意SQL Server 不触发正在插入和/或更新的每一行的触发器。触发器将为每个语句触发 - 并且一个语句可以很好地更新50行 - 在这种情况下,触发器会触发一次,并且内部的伪表触发器(LabelPrint
,Inserted
)每个将包含50行。只是不要假设Deleted
只包含一行 - 这种假设完全是假的。