Обновить триггер с помощью GROUP BY - PullRequest
1 голос
/ 15 августа 2011

Я использую триггеры вставки / обновления для обновления столбца второй таблицы 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

Мне нужно сгруппировать по номеру материала, потому что в таблицу tabSparePartMasterData_Temp вставлены избыточные строки, которые я использую только для обновления Sparepart-Price в tabSparePart.Но я предположил, что группа по отсортирует дубликаты (цена одинакова для любого дубликата).

Возможно, что вставленные / обновленные записи 'MaterialNumber недоступны в tabSparepart.В этом случае эта запись должна быть "пропущена".INNER JOIN принимает это во внимание?

1 Ответ

5 голосов
/ 15 августа 2011

Попробуйте добавить SET NOCOUNT ON к триггеру

Эта ошибка не похожа на ошибку SQL, и я предполагаю, что клиентский код запутывается из-за второго обновления в триггере.

Редактировать: эта ошибка может быть вызвана глупым представлением таблицы данных в SSMS.

Это не сообщение SQL, как я думал: это глупое сообщение SSMS

Посмотрите, что все говорит "научиться писать SQL"

Скажем так, есть статья *1026* KB об ошибке в SQL Server 2005 ...

...