2016-11-04 3 views
1

SQL Server (예 : T-SQL 언어)에 자연스러운 방법이 있는지 또는 멋진 제약 조건/트리거를 작성해야하는지 궁금합니다. 가정하자유지 관리 방법

나는 테이블을

 RebuplicanCandidates 
=================================== 
Id |  Name  | ByteIndex 
=================================== 
1 | 'Marco Rubio' | 0 
2 | 'Jeb Bush'  | 1 
3 | 'Donald Trump' | 2 
4 | 'Ted Cruz'  | 3 

을하고 난 JebBush을 제거 :

DELETE FROM [RepublicanCandidates] WHERE [Id]=2 

가 그럼 난 테이블이 ByteIndex 열이 단행 것을

 RebuplicanCandidates 
=================================== 
Id |  Name  | ByteIndex 
=================================== 
1 | 'Marco Rubio' | 0 
3 | 'Donald Trump' | 1 
4 | 'Ted Cruz'  | 2 

공지 사항처럼되고 싶어요.

그리고 나는 후보를 삽입 할 경우

INSERT INTO [RepublicanCandidates] (Name) VALUES ('CarlyFiorina') 

테이블은 테이블을 기반으로보기를 만든 경우

 RebuplicanCandidates 
=================================== 
Id |  Name  | ByteIndex 
=================================== 
1 | 'Marco Rubio' | 0 
3 | 'Donald Trump' | 1 
4 | 'Ted Cruz'  | 2 
5 | 'Carly Fiorina' | 3 
+1

ehm .... 삽입 된 행에 어떤 현상이 발생 했습니까? – Lamak

+0

@Lamak 죄송합니다. –

+1

왜 간격이없는 ByteIndex를 저장해야합니까? 첫 번째 행을 삭제하면 테이블의 다른 모든 행을 업데이트해야 함을 의미합니다. –

답변

4

, 당신은 ROW_NUMBER() 함수를 추가하고, 드롭 수된다 기본 테이블의 ByteIndex 열입니다.

CREATE VIEW vRebuplicanCandidates 
AS 

SELECT id, name , ROW_NUMBER() OVER (ORDER BY id) - 1 AS ByteIndex 
FROM RebuplicanCandidates 
+0

ROW_NUMBER () 행에 대한 특정 순서를 보장하지는 않습니다. – philipxy

0

T-SQL은 사용자가 요구하는 것을 수행 할 수 없습니다. 당신은 좋은 답변을 다른 답변에 몇 가지 코드 또는 제안을 작성해야합니다.