iT邦幫忙

DAY 10
4

MS SQL Server新特性探險:探險代碼 Denali系列 第 10

[Denali 新特性探險10]Sequence

這篇介紹Sequence
概述
Sequence類似 Identity Column ,
差別在於 Sequence 不屬於Table Level 而是屬於 DataBase Level,
且Sequence也不參與交易

管理
可以透過新的system catalog (sys.sequences) ,
查看現在數值、累加數值、起始數值..等資訊。

select t1.name,t1.type,t1.type_desc,t1.is_cached,t1.cache_size,t1.current_value,
t1.minimum_value,t1.maximum_value
from sys.sequences t1

改善
以前SQL Server還沒有Sequence物件時,如果你想要很多資料表共用相同流水號,
大概都會在額外建立一個資料表來維護流水號,而每個AP的取號基本會有2步驟:
1.查詢該資料表最大編號。2.更新紀錄到該資料表並取號(以步驟1編號+1),
而這麼麻煩(參與交易)的處理過程是不會出現在 Denali 的,
因為 Denali多了 Sequence 新物件並解決共用相同流水號的問題,
且SQL Server Sequence 和Oracle Sequence 功能上並無差異。

操作示範

--建立MySerial Sequence
create sequence MySerial
start with 1
increment by 1

--建立 A 和B資料表
create table A
(
serial int,
name varchar(10)
)

create table B
(
serial int,
name varchar(10)
)

--新增資料。A 和B 共用 MySerial
insert into A 
select next value for MySerial, 'rico' union all
select next value for MySerial, 'papa'

insert into B
select next value for MySerial, 'rico' union all
select next value for MySerial, 'papa'
--結果
select * from A
select * from B


next value=增加sequence的值

Sequence歸0

--歸 0
alter sequence dbo.MySerial
restart with 0
--確認當前流水號
select t1.name,t1.current_value
from sys.sequences t1

不參與交易

select t1.name,t1.current_value as '交易前'
from sys.sequences t1
begin tran MYTRAN 
insert into a select next value for MySerial,'ricoisme'
rollback tran MYTRAN 
select t1.name,t1.current_value as '交易後'
from sys.sequences t1
--確認資料 A
select * from a


雖然回復整個交易,但因為sequence 不參與交易,所以依然 value + 1。

MS SQL Server新特性探險:探險代碼 Denali 全系列文章


上一篇
[Denali 新特性探險9]With Result Sets
下一篇
[Denali 新特性探險11]Metadata Discovery
系列文
MS SQL Server新特性探險:探險代碼 Denali30

尚未有邦友留言

立即登入留言