SQL?Server新特性SequenceNumber用法介紹
簡介
SequenceNumber是SQL Server2012推出的一個新特性。這個特性允許數(shù)據(jù)庫級別的序列號在多表或多列之間共享。對于某些場景會非常有用,比如,你需要在多個表之間公用一個流水號。以往的做法是額外建立一個表,然后存儲流水號。而新插入的流水號需要兩個步驟:
- 1.查詢表中流水號的最大值
- 2.插入新值(最大值+1)
現(xiàn)在,利用SQL Server2012中的Sequence.這類操作將會變得非常容易。
SequenceNumber的基本概念
SequenceNumber的概念并不是一個新概念,Oracle早就已經(jīng)實現(xiàn)了(http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6015.htm)。與以往的Identity列不同的是。SequenceNumber是一個與構(gòu)架綁定的數(shù)據(jù)庫級別的對象,而不是與具體的表的具體列所綁定。這意味著SequenceNumber帶來多表之間共享序列號的遍歷之外,還會帶來如下不利影響:
- 與Identity列不同的是,Sequence插入表中的序列號可以被Update,除非通過觸發(fā)器來進(jìn)行保護(hù)
- 與Identity列不同,Sequence有可能插入重復(fù)值(對于循環(huán)SequenceNumber來說)
- Sequence僅僅負(fù)責(zé)產(chǎn)生序列號,并不負(fù)責(zé)控制如何使用序列號,因此當(dāng)生成一個序列號被Rollback之后,Sequence會繼續(xù)生成下一個號,從而在序列號之間產(chǎn)生間隙。
SequenceNumber的用法
SequenceNumber在MSDN中定義的原型如代碼1所示。
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 } ] [ ; ]
代碼1.Sequence的創(chuàng)建原型
由代碼1看以看到,參數(shù)相對比較簡單。從指定數(shù)據(jù)類型(INT兼容)到開始計數(shù)點,步長,最大值和最小值,是否循環(huán)和是否緩存幾個參數(shù)來設(shè)置Sequence。
下面圖1創(chuàng)建了一個簡單的Sequence。
圖1.創(chuàng)建一個簡單的Sequence并進(jìn)行使用
此時,我們可以通過SQL Server 2012新增的視圖sys.sequences來看到剛才創(chuàng)建成功的Sequence,如圖2所示.
圖2.sys.sequences視圖
當(dāng)然我們可以這個序列按照順序插入表,如圖3所示。
圖3.在單表中插入序列
而SequenceNumber最重要的功能是在多表間共享序列號,如圖4所示。
圖4.多表之間利用Sequence共享序列號
前面圖2可以看到,如果我們不指定Sequence的上限和下限,則默認(rèn)使用所指定數(shù)據(jù)類型的最大值和最小值作為上限和下限(如圖2INT類型的的上下限).當(dāng)達(dá)到上線后,可以指定循環(huán)來讓Sequence達(dá)到上限后從指定的開始值重新開始循環(huán)。如圖5所示。
圖5.Sequence設(shè)置上限下限和循環(huán)
還可以通過修改Sequence將其初始值指定為一個特定值,如圖6所示。
圖6.重置Sequence的值
Sequence一個需要注意的情況是Sequence只負(fù)責(zé)生成序列號,而不管序列號如何使用,如果事務(wù)不成功或回滾,SequenceNumber仍然會繼續(xù)向后生成序列號,如圖7所示。
圖7.Sequence僅僅負(fù)責(zé)生成序列號
我們還可以為Sequence指定緩存選項,使得減少IO,比如,我們指定Cache選項為4,則當(dāng)前的Sequence由1增長過4后,SQL Server會再分配4個空間變?yōu)閺?到8,當(dāng)分配到9時,SQL Server繼續(xù)這以循環(huán),如果不指定Cache值,則值由SQL Server進(jìn)行分配。一個簡單的例子如圖8所示。
圖8.為Sequence設(shè)置Cache選項
總結(jié)
本文講述了SequenceNumber的簡單用法。Sequence是一個比較方便的功能,如果使用妥當(dāng),將會大大減少開發(fā)工作和提升性能。
參考資料:
CREATE SEQUENCE (Transact-SQL)
到此這篇關(guān)于SQL Server新特性SequenceNumber用法的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SQL Server高級內(nèi)容之case語法函數(shù)概述及使用
本文將詳細(xì)介紹下Case函數(shù)的用法感興趣的你可以參考下,或許對你有所幫助2013-03-03sqlserver 存儲過程帶事務(wù) 拼接id 返回值
存儲過程帶事務(wù),拼接id,返回值 以下SQL以防以后還需用到,特此備份2012-10-10Sql學(xué)習(xí)第一天——SQL UNION 和 UNION ALL 操作符認(rèn)識
UNION 操作符用于合并兩個或多個 SELECT 語句的結(jié)果集,有一點需要注意的是UNION 內(nèi)部的 SELECT 語句必須擁有相同數(shù)量的列,接下來為大家詳細(xì)介紹下,感興趣的各位可以參考下哈2013-03-03sql自動化檢查和分析工具 之soar和soar-web 安裝和使用體驗
這篇文章主要介紹了sql自動化檢查和分析工具 之soar和soar-web 安裝和使用體驗,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04SQL Server 常用函數(shù)使用方法小結(jié)
這篇文章主要介紹了SQL Server 常用函數(shù)使用方法小結(jié),需要的朋友可以參考下2017-05-05做購物車系統(tǒng)時利用到得幾個sqlserver 存儲過程
最近使用asp.net+sql2000開始開發(fā)一個小型商城系統(tǒng),其中涉及到得購物車功能主要是仿照淘寶實現(xiàn)的.2009-12-12