SQL Server触发器更改其他表

时间:2018-08-10 09:57:31

标签: sql-server

如果试图在表A的列中找到信息,我将尝试创建一个触发器来更改表​​B中的列的值。

我的数据库示例如下:

[TableA], itemID

[TableB], itemID itemInStock

一旦用户在表A中创建一个声明为itemID的条目,触发器就需要将TableB.itemInStock列更改为“是”

我仍在学习SQL,所以请放心,如果我错过了什么,请告诉我是否需要更多信息。

我知道有更好的方法来执行此操作,但是有人告诉我我需要使用触发器来执行此操作。

我尝试了几种不同的方法,但实际上没有任何作用,下面是当前的解决方案,但是我将所有itemInStock行更新为“是”,因为我只希望这些行更新TableB.itemIDTableA中输入的itemID匹配的地方。

 ALTER TRIGGER [itemAvailability] ON  [dbo].[TableA] FOR
 INSERT
 AS 
    BEGIN
     UPDATE [dbo].[TableB] set itemInStock = 'Yes' WHERE 
        TableB.itemID = itemID
  END

1 个答案:

答案 0 :(得分:2)

两个问题-

  1. 您没有查看包含以下内容的插入的伪表: 新插入的行

  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