Rya*_*man 1 sql sql-server database-design
SequenceId 是一个自动递增的标识列,但不是主键.
我想要发生的是当一行更新时,SequenceId设置为下一个可用值,例如:
_____________________
| SequenceId | Name |
| 1 | John |
| 2 | Jane |
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Run Code Online (Sandbox Code Playgroud)
将约翰更新为杰克.SequenceId设置为下一个可用的标识值.
_____________________
| SequenceId | Name |
| 3 | Jack |
| 2 | Jane |
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Run Code Online (Sandbox Code Playgroud)
这可能与SQL Server一起使用吗?如果没有,那将是另一种选择?
我认为你不能,至少不容易或干净.为什么不使用ROWVERSION列?每次将行更新为数据库中新的唯一递增值时,ROWVERSION列都会更新.您可以创建一个计算列,如果要对其进行索引,则将其转换为bigint.缺点是时间戳是数据库范围的,所以如果有多个表使用它们,你可以跳过数字.
create table TestRowVersion (
Id int primary key,
Name varchar(20),
BinaryRowVersion ROWVERSION,
IntegerRowVersion as convert(BIGINT, BinaryRowVersion)
)
create index IDX_TestRowVersion on TestRowVersion (IntegerRowVersion)
insert into TestRowVersion (Id, Name) values (1, 'Alvin')
insert into TestRowVersion (Id, Name) values (2, 'Betsy')
insert into TestRowVersion (Id, Name) values (3, 'Charles')
select * From TestRowVersion
update TestRowVersion set Name = 'Frank' where Id = 2
select * From TestRowVersion
Run Code Online (Sandbox Code Playgroud)
[编辑] - 更新为使用RowVersion,因为不推荐使用时间戳
| 归档时间: |
|
| 查看次数: |
1381 次 |
| 最近记录: |