Sql 尝试在插入时创建触发器时出现多部分标识符错误
每当一个新行插入到另一个表中时,我都会尝试更新一个表 当一行添加到Sql 尝试在插入时创建触发器时出现多部分标识符错误,sql,sql-server,triggers,sql-server-2012,sql-insert,Sql,Sql Server,Triggers,Sql Server 2012,Sql Insert,每当一个新行插入到另一个表中时,我都会尝试更新一个表 当一行添加到storeRoutes表中时,我希望此触发器更新我的productList表中的一列。它应该使用插入到storeRoutes的新行中的storeProductId列,将列isAvailable设置为0(false) 这是我的扳机: CREATE TRIGGER [setIsAvailableFalse] ON [storeRoutes] AFTER INSERT AS BEGIN SET
storeRoutes
表中时,我希望此触发器更新我的productList
表中的一列。它应该使用插入到storeRoutes
的新行中的storeProductId
列,将列isAvailable
设置为0(false)
这是我的扳机:
CREATE TRIGGER [setIsAvailableFalse]
ON [storeRoutes]
AFTER INSERT
AS BEGIN
SET NOCOUNT ON;
UPDATE productList
SET isAvailable = 0
WHERE productId = Inserted.storeProductId
END
但我不断地得到一个错误:
无法绑定多部分标识符“Inserted.storeProductId”
我做错了什么
谢谢 您需要从伪表
插入的中选择:
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)
为什么不使用默认值约束?嗨,谢谢!您建议的第一个解决方案出现了一个错误…位置附近的语法不正确
,但我只是复制并粘贴了您所写的内容。所有的表名和列名都是正确的。谢谢,我从SQL Server收到一条警告,即将执行一条更新语句,但没有WHERE
@SkyeBoniwell:这只是一条警告。连接确保只有相关的行得到更新,因此无需担心。