眾所周知,在之前的sqlserver版本中,一般采用GUID或者identity來作為標示符,但是identity是一個表對象,只能保證在一張表里面的序列,當我們遇到以下情況時,
表1
| ID | 訂單類型 | 價格 |
| 1 | 火車票 | 200 |
| 4 | 飛機票 | 2000 |
| 5 | 船票 | 600 |
表2
| ID | 訂單類型 | 價格 |
| 2 | 酒店 | 400 |
| 3 | 公園門票 | 170 |
| 6 | 租車費用 | 300 |
如上圖,我們需要在多表之間,實現ID的一致性,在sqlserver里面就會有一定的麻煩,通常我們會使用額外使用一張temp表來映射這些ID的關系然后再從中取序列來完成。
sequence在oracle中其實很早就存在了,sqlserver 2012的sequence功能和那個相似,是一個基於schema的對象,所以可以被多表調用。
sequence語法如下:
- CREATE SEQUENCE [schema_name . ] sequence_name
- [ AS [ built_in_integer_type | user-defined_integer_type ] ]
- [ START WITH <constant> ]
- [ INCREMENT BY <constant> ]
- [ { MINVALUE [ <constant> ] } | { NO MINVALUE } ]
- [ { MAXVALUE [ <constant> ] } | { NO MAXVALUE } ]
- [ CYCLE | { NO CYCLE } ]
- [ { CACHE [ <constant> ] } | { NO CACHE } ]
- [ ; ]
CREATE SEQUENCE [schema_name . ] sequence_name
[ AS [ built_in_integer_type | user-defined_integer_type ] ]
[ START WITH <constant> ]
[ INCREMENT BY <constant> ]
[ { MINVALUE [ <constant> ] } | { NO MINVALUE } ]
[ { MAXVALUE [ <constant> ] } | { NO MAXVALUE } ]
[ CYCLE | { NO CYCLE } ]
[ { CACHE [ <constant> ] } | { NO CACHE } ]
[ ; ]
start with 設置起始值
increment by 設置增長間隔
min和max分別設置最小和最大值
cycle設置是否循環
cache指定緩存的設置
