2014-11-12 2 views
0

을 분류 I 후속 테이블이 있습니다SQL은 : 삭제 행

item_id image_id position 
1  10  0 
1  21  1 
1  17  2 
1  113  3 
: 각 PRIMARY KEY 튜플에 대한

item_id : int 
image_id : int 
position : int 

이 (ITEM_ID은, image_id)이없는 구멍 분류 된 고유 한 위치가

정확하게 (1, 21)을 제거하여 올바르게 분류되도록하는 가장 좋은 방법은 무엇입니까? 나는 가장 간단한 SQL 쿼리를 찾고있다.

+0

을합니다 : if (1,21)이 삭제되고, (17,2)가 (17,1)이되어야하고 (113,3)이 (133,2)가되어야합니까? –

+1

Rik_S가 말하는 것을 의미한다면 그 디자인은 그리 바람직하지 않습니다. 'position' 열은 아무런 쓸모가 없습니다. 단지 행 색인 만 볼 수 있습니다. –

+0

Rik_S : 참. Tea : 두 번째 자리에 어떻게 새 행을 삽입 하시겠습니까? –

답변

0

당신이 당신의 테이블을 업데이트합니다 트리거를 만들 수 있습니다

이 트리거가 해고되고 당신이 어떤 행 삭제 한 후 위치 열을 업데이트 할 것입니다 : 내가 제대로받을 경우에 따라서

CREATE TRIGGER trigName ON TableName 
AFTER DELETE 

AS 
    UPDATE T 
    SET t.position = n.position 
    FROM TableName AS T 
    INNER JOIN (SELECT itemID,imageID, ROW_NUMBER() OVER(ORDER BY id) - 1 as Position FROM TableName) as N ON t.itemID = n.itemID AND t.imageID = n.ImageID 
GO