2009-12-04 29 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