2012-02-09 94 views
2

我有以下問題。一個SQL表存儲作業項目,每個項目有state。項目可以一起或單獨更改狀態以及其他屬性。我希望能夠爲每個作業項目分配一個唯一增加的整數(64位或更多位),這些整數只會在我要求時分配,而不會像每個更新一樣更新,如timestamp的行爲。所以,我希望能夠做到兩個操作:如何在SQL Server中生成唯一的遞增整數值?

  1. 更新一些其他的領域,而不改變該行整數型和
  2. 更新狀態和整數

當整數改變它應該大於該列所產生的所有其他此類整數(當然每個表或每個數據庫也會這樣做)。

這需要具有可擴展性,以便多個客戶端可以使用數據庫而不會受到嚴重的處罰。

我該怎麼做?

回答

2

聽起來像是你需要的序列。

這與您的表分離(不像IDENTITY),可以是表或數據庫範圍:由您決定。

序列是即將到來的SQL Server 2012中的原生支持,但在那之前,你可以模擬一個按本dba.se問題:https://dba.stackexchange.com/q/3307/630

3

看這裏http://blogs.msdn.com/b/sqlazure/archive/2010/07/15/10038656.aspx。應該幫助

但簡而言之,你需要聲明一個字段作爲您的表如下:

Id bigint PRIMARY KEY IDENTITY (1,1) 
+2

+1:但是,並不需要* *是'PRIMARY KEY ',如果需要/適當的話可以使用它。無可否認,這通常是一個IDENTITY列的情況:) – MatBailie 2012-02-09 10:08:14

+0

確實,只是很快抓住了代碼:P – twilson 2012-02-09 10:37:08