我'm using insert-/update triggers to update a second table'的专栏 Price
.
插入触发器似乎工作得很好,但是当我尝试更改SSMS中的单个记录时,我收到一个错误:
更新或删除的行值不会使行唯一,也不会更改多行(2行) .
这是我的更新触发器:
CREATE TRIGGER [dbo].[trgUpdateMasterData] ON [dbo].[tabSparePartMasterData_Temp]
AFTER UPDATE
AS
UPDATE tabSparePart
SET Price = MD.Price
FROM tabSparePart INNER JOIN
(
SELECT inserted.[Material Number (SAP)] AS MaterialNumber, inserted.Price
FROM inserted
GROUP BY [Material Number (SAP)], inserted.Price
) MD
ON tabSparePart.SparePartName = MD.MaterialNumber
我需要按Material-Number分组,因为在表 tabSparePartMasterData_Temp
中插入了冗余行,我只用于更新 tabSparePart
中的Sparepart-Price . 但我假设小组将整理重复(任何重复的价格相同) .
它's possible that the inserted/updated records' MaterialNumber
在 tabSparepart
中不可用 . 在这种情况下,此记录应为"skipped" . INNER JOIN
是否考虑到了这一点?
1 回答
尝试将
SET NOCOUNT ON
添加到触发器此错误看起来不像SQL错误,我猜测客户端代码被触发器中的第二次更新搞糊涂了 .
编辑:这个错误可能是由SSMS中的数据网格视图愚蠢造成的 .
这不是我想的SQL消息:它是一个SSMS是愚蠢的消息
看到这些都说“学会写SQL”
http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/dealing-with-the-row-value-s-updated-or(小于点博客)
Trigger that modifies multiple rows on diffrent table then it was invoked on in SQL Server 2005
SSMS permits duplicate records in a table, but not subsequent updates
这么说,有一个关于SQL Server 2005中的错误的KB article ...