Обновление триггера с помощью GROUP BY
Я использую триггеры insert//update для обновления второго столбца таблицы 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
добавлены избыточные строки, которые я использую только для обновления Sparepart-Price в tabSparePart
. Но я предположил, что группа будет сортировать дубликаты (цена одинакова для любого дубликата).
Возможно, что вставленные/обновленные записи 'MaterialNumber
недоступны в tabSparePart
. В этом случае эта запись должна быть "пропущена". Учитывает ли это INNER JOIN
?
Ответы
Ответ 1
Попробуйте добавить SET NOCOUNT ON
к триггеру
Эта ошибка не похожа на ошибку SQL, и я предполагаю, что код клиента запутывается вторым обновлением в триггере.
Изменить: эта ошибка может быть вызвана тем, что вид сетки данных в SSMS является глупым.
Это не сообщение SQL, как я думал: это SSMS - это глупое сообщение
Посмотрите на все, что говорит "научиться писать SQL"
Сказав, что есть статья в KB об ошибке в SQL Server 2005...