use*_*529 5 sql-server sequence
我说,我的表中有专栏updateStamp.我希望得到一种方法,在行更新时使用新的序列号更新该字段.
数据库有很多流量,主要是读取,但多个并发更新也可以批量发生.因此,解决方案应该导致最小的锁.
这个要求的原因是我需要有一个解决方案让客户端迭代表转发,如果一行更新 - 它应该再次出现在结果集上.
那么,查询就好了
SELECT *
FROM mytable
WHERE updateStamp > @lastReturnedUpdateStamp
ORDER BY updateStamp
Run Code Online (Sandbox Code Playgroud)
不幸的是,时间戳在这里不起作用,因为多个更新可能同时发生.
(timestamp已弃用的)或rowversion(当前的)数据类型是我所知道的唯一一种在行上的每次写入操作时都会更新的数据类型。
它本身不是时间戳 - 它不存储日期、以小时、秒为单位的时间等 - 它实际上更像是RowVersion(因此名称更改) - 行上唯一的、不断增加的数字(二进制)。
它通常用于检查从读取行到更新行之间的任何修改。
由于它并不是真正的日期/时间信息,因此您很可能必须为人类可读的信息设置另一列。您可以LastModified DATETIME向表中添加一列,并且通过DEFAULT GETDATE()约束,您可以在插入时插入新值。为了保持最新,您必须编写一个 AFTER UPDATE 触发器,以便LastModified在发生任何更新时更新该列。
SQL Server 2011(又名“Denali”)将为我们带来SEQUENCES最适合您的情况 - 但可惜,距离正式发布至少还需要一年......