如何保持

时间:2016-11-04 16:56:18

标签: sql sql-server tsql database-design

我想知道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

然后我希望表格像

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

请注意,ByteIndex列已经洗牌。

然后如果我插入候选人

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

2 个答案:

答案 0 :(得分:4)

如果您根据表创建了VIEW,则可以添加row_number()函数,并从基表中删除ByteIndex列。

CREATE VIEW vRebuplicanCandidates
AS

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

答案 1 :(得分:0)

T-SQL无法满足您的要求。你将不得不在另一个答案中写一些代码或建议是一个很好的恕我直言。