眾所周知,在之前的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指定緩存的設置