【问题标题】:Multi-part identifier error when trying to create a trigger on insert尝试在插入时创建触发器时出现多部分标识符错误
【发布时间】:2021-03-27 09:47:37
【问题描述】:

每当将新行插入另一个表时,我都会尝试更新表。

当向storeRoutes 表中添加一行时,我希望此触发器更新我的productList 表中的列。它应该使用插入到storeRoutes 的新行中的storeProductId 列将isAvailable 列设置为0(假)。

这是我的触发器:

CREATE TRIGGER [setIsAvailableFalse]
    ON [storeRoutes]    
    AFTER INSERT
    AS  BEGIN

    SET NOCOUNT ON;     

    UPDATE productList
    SET isAvailable = 0     
    WHERE productId = Inserted.storeProductId

END

但我不断收到错误消息:

多部分标识符,“Inserted.storeProductId”无法绑定。

我做错了什么?

谢谢!

【问题讨论】:

  • 为什么不使用DEFAULT 约束?

标签: sql sql-server triggers sql-server-2012 sql-insert


【解决方案1】:

你需要从伪表insertedselect

UPDATE pl 
SET isAvailable = 0     
FROM productList pl
INNER JOIN Inserted i ON pl.productId = i.storeProductId

你也可以使用exists:

UPDATE pl 
SET isAvailable = 0     
FROM productList pl
WHERE EXISTS (SELECT 1 FROM Inserted i WHERE  pl.productId = i.storeProductId)

【讨论】:

  • 您好,谢谢!我收到您建议的第一个解决方案的错误...Incorrect syntax near WHERE 但我只是复制并粘贴了您写的内容。所有表名和列名都正确。
  • 谢谢我收到来自 SQL Server 的警告,about to execute an UPDATE statement without a WHERE
  • @SkyeBoniwell:这只是一个警告。连接确保只有相关的行得到更新,所以不用担心。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 2015-08-15
相关资源
最近更新 更多