SQL Server 2012 开发新功能 序列对象(Sequence)

    众所周知,在之前的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语法如下:

[html] view plaincopyprint?
  1. CREATE SEQUENCE [schema_name . ] sequence_name 
  2.     [ AS [ built_in_integer_type | user-defined_integer_type ] ] 
  3.     [ START WITH <constant>
  4.     [ INCREMENT BY <constant>
  5.     [ { MINVALUE [ <constant> ] } | { NO MINVALUE } ] 
  6.     [ { MAXVALUE [ <constant> ] } | { NO MAXVALUE } ] 
  7.     [ CYCLE | { NO CYCLE } ] 
  8.     [ { CACHE [ <constant> ] } | { NO CACHE } ] 
  9.     [ ; ] 
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指定缓存的设置

posted @ 2012-11-09 15:26 zhangyoushugz 阅读(...) 评论(...) 编辑 收藏