2011-08-15 4 views
1

두 번째 테이블의 열 Price을 업데이트하기 위해 삽입/업데이트 트리거를 사용하고 있습니다.GROUP BY로 트리거 업데이트

삽입 트리거는 완벽하게 작동하는 것 같다,하지만 난 SSMS에서 하나의 레코드를 변경하려고 할 때, 나는 오류 얻을 :

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 

: 이것은 내 갱신 트리거가

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

입니다 나는 tabSparePart의 Sparepart-Price를 업데이트하기 위해서만 사용하는 tabSparePartMasterData_Temp 테이블에 중복 행이 삽입되어 Material-Number로 그룹화해야합니다. 그러나 나는 그 그룹이 중복을 분류 할 것이라고 생각했다. (가격은 어떤 복제에도 동일하다.)

삽입/업데이트 된 레코드 'MaterialNumbertabSparepart에서 사용할 수 없습니다. 이 경우이 레코드는 "건너 뜁니다". INNER JOIN이이를 고려합니까? 트리거

이 오류는 SQL 오류처럼 보이지 않는 내가 클라이언트 코드가 트리거 2 업데이트로 혼란스러워지고 같은데요에 SET NOCOUNT ON를 추가

+0

오류 메시지가 나타나는 이유는 무엇입니까? 그것은 SQL처럼 보이지 않습니다 ... – gbn

+0

우연히'(tabSparePart.Price)'또는'(tabSparePart.SparePartName, tabSparePart.Price)'에 유일한 제약 조건이 있습니까? 두 개 이상의 동일한 tabSparePart.SparePartName이있는 경우 업데이트가 제약 조건을 위반할 수 있으며 실제로 그 일이 발생할 수 있습니다. –

+0

@ gbn : 트리거를 사용하여 테이블의 가격 값을 변경하려고하면 SSMS (SQL Server Management Studio)가 발생합니다. –

답변

5

보십시오.

편집 :이 오류는 어리석은 SSMS의 데이터 그리드보기로 인해 발생할 수 있습니다.

이것은 SQL 메시지 생각만큼되지 않습니다 : 그것이 SSMS 모든라고하는 이들은 "SQL을 작성하는 학습"을 참조하십시오 바보 같은 메시지를

되는 것입니다

S

SQL Server 2005의 버그에 관한 KB article이 있습니다 ...

+0

트리거를 SET NOCOUNT ON으로 변경했지만 오류는 같습니다. "2 차 업데이트"란 무엇을 의미합니까? 이 트리거에 속한 테이블과 다른 테이블을 업데이트하고 있습니다. –

+0

@Tim Schmelter : 다른 테이블에도 * 2 개의 업데이트가 있습니다. 어떤 클라이언트는 이것으로 혼란스러워합니다. http://stackoverflow.com/questions/1483732/set-nocount-on-usage – gbn

+0

당신 말이 맞아요. 방아쇠 상단에 'NOCOUNT'를 추가했지만 'UPDATE'바로 위에 삽입해야했습니다.고맙습니다. –

관련 문제