2009-12-04 79 views
14

Noob问题在这里,每当我更改SQL Server 2008 R2表中的某个记录时,我想递增RevisionId记录;这样做,我使用的语法如下:在SQL Server中递增整数

UPDATE TheTable 
SET RevisionId=(SELECT RevisionId 
       FROM TheTable 
       WHERE [email protected]) + 1 
WHERE [email protected]; 

顺便说一句,我打算把这个变成一个触发器,使这种情况发生自动的,但在此代码的工作,感觉很笨重—任何清洁剂如何做到这一点?

回答

34

你并不需要内部的选择:

UPDATE TheTable SET RevisionId = RevisionId + 1 WHERE [email protected] 
10

这是递增领域的SQL成语:

UPDATE TheTable 
SET RevisionId = RevisionId + 1 
WHERE [email protected]; 
+0

请确保您在交易中执行此操作,否则您最终会尝试追查最奇怪的错误。 – Donnie 2009-12-04 23:42:21

+8

@Donnie:你在说什么? UPDATE ... SET field = field + 1总是原子的。 – 2009-12-04 23:45:36

1

如果你只是寻找一个“行版”值,你有没有考虑在你的表中添加一个TimeStamp列? SQL Server每次都会“自动”更新它。根本没有代码。如果这对你很重要,它们就不会被连续编号。

+1

这也很有趣,谢谢你的提示!在这种情况下,我也想更新行的容器(我在表中有一个树状结构),但是使用时间而不是修订版可能也是个好主意 – 2009-12-05 00:15:53

+0

SQL Server的“时间戳”是一个64位序列整数为您的数据库。这太糟糕了,它被称为时间戳,因为它与日期或时间完全没有关系。它旨在供复制过程使用。 – 2009-12-05 22:23:40