2016-11-04 10 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') 

を挿入した場合、その後の表では、テーブルに基づいてビューを作成した場合、あなたはROW_NUMBER()関数を追加し、ドロップでき

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

ehm ....挿入された行はどうなりましたか? – Lamak

+0

@LamakOops、そこに行く –

+1

なぜギャップのないByteIndexを格納する必要がありますか?最初の行を削除すると、表の他のすべての行を更新する必要があります。 –

答えて

4

なりベーステーブルの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では、あなたが求めていることはできません。あなたはいくつかのコードを書くか、別の答えに示唆を書くことが良いIMHOです。

関連する問題