如果试图在表A的列中找到信息,我将尝试创建一个触发器来更改表B中的列的值。
我的数据库示例如下:
[TableA], itemID
[TableB], itemID itemInStock
一旦用户在表A中创建一个声明为itemID
的条目,触发器就需要将TableB.itemInStock
列更改为“是”
我仍在学习SQL,所以请放心,如果我错过了什么,请告诉我是否需要更多信息。
我知道有更好的方法来执行此操作,但是有人告诉我我需要使用触发器来执行此操作。
我尝试了几种不同的方法,但实际上没有任何作用,下面是当前的解决方案,但是我将所有itemInStock
行更新为“是”,因为我只希望这些行更新TableB.itemID
与TableA
中输入的itemID匹配的地方。
ALTER TRIGGER [itemAvailability] ON [dbo].[TableA] FOR
INSERT
AS
BEGIN
UPDATE [dbo].[TableB] set itemInStock = 'Yes' WHERE
TableB.itemID = itemID
END
答案 0 :(得分:2)
两个问题-
您没有查看包含以下内容的插入的伪表: 新插入的行
您假设触发器每行调用一次-这不是 在这种情况下,每个语句都会调用一次触发器,并且插入 伪表将包含多行-您需要处理
因此,您的代码应如下所示-
ALTER TRIGGER [itemAvailability] ON [dbo].[TableA]
FOR INSERT
AS
UPDATE TB
SET itemInStock = 'Yes'
FROM [dbo].[TableB] TB JOIN inserted I
on TB.itemID = I.itemID