2011-08-15 49 views
1

我正在使用insert-/update触发器更新第二个表的列Price使用GROUP BY更新触发器

插入触发器似乎完美地工作,但是当我尝试改变SSMS一个记录,我得到一个错误:

The row value(s) updated or deleted either do not make the row unique or they alter multiple rows(2 rows).

这是我的更新触发:

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 

我需要按物料编号进行分组,因为有多余行插入tabSparePartMasterData_Temp表中,我只用它来更新tabSparePart中的备件价格。但是我认为小组会根据重复的情况来整理(价格与任何重复相同)。

插入/更新记录'MaterialNumbertabSparepart中可能不可用。在这种情况下,这个记录应该被“跳过”。 INNER JOIN是否考虑到了这一点?

+0

什么产生错误信息?它看起来不像SQL ... – gbn

+0

对'(tabSparePart.Price)'或'(tabSparePart.SparePartName,tabSparePart.Price)'有一个偶然的唯一约束吗?如果有两个或更多相同的'tabSparePart.SparePartName',则更新可能违反约束条件,也许这就是实际发生的情况。 –

+0

@gbn:SQL-Server Management-Studio(SSMS)当我尝试使用触发器更改表中的价格值时。 –

回答

5

尝试增加SET NOCOUNT ON到触发

此错误看起来并不像一个SQL错误,我猜的客户端代码得到由触发器月2日更新混淆。

编辑:这个错误可能是由于SSMS中的数据网格视图很愚蠢造成的。

这不是因为我想到了一个SQL消息:这是一个SSMS愚蠢消息

看到这些,所有说“学写SQL”

小号aying,有一个关于SQL Server 2005中的错误的KB article ...

+0

我已将触发器更改为“SET NOCOUNT ON”,但错误相同。 “第二次更新”是什么意思?我正在更新与属于此触发器的表不同的表格。 –

+0

@Tim Schmelter:即使在不同的桌子上也有* 2 *更新。有些客户会因此而感到困惑。 http://stackoverflow.com/questions/1483732/set-nocount-on-usage – gbn

+0

你是对的。我在触发器的顶部添加了“NOCOUNT”,但我必须将它直接插入到“UPDATE”之上。谢谢。 –