在MSSQL中實現Sequence功能

來源:互聯網
上載者:User

目的: 通過該功能取代 MSSQL 中的表ID列自動遞增功能

 

主題一:如何通過Sequence名得到一個Sequence值

方法:

1.    建立一個表Sequence,儲存Sequence的值

2.    建立一個預存程序GetNextSequence,以通過它得到下一個Sequence

主題二:如何通過一個表名得到一個Sequence值

1.    建立一個表TableSequence,儲存表中的列對應的是哪個Sequence

2.    建立一個預存程序CreateTableSeq,把表TableSequence的內容放入全域暫存資料表@@TmpTableSequence,以提高效能

3.    建立一個預存程序GetNextSequenceByTableName,以通過它得到下一個Sequence

 

主題一:如何通過Sequence名得到一個Sequence值

方法:

1.    建立一個表Sequence,儲存Sequence的值

表Sequence:

表名

資料類型

是否為空白

索引

說明

SEQNAME

varchar2(50)

N

PK

Sequence名

STARTWITH

number

N

 

開始值

INCREMENT

number

N

 

增量

LASTVALUE

number

N

 

該Sequence最後的值

MINVALUE

number

N

 

最小值

MAXVALUE

number

N

 

最大值,0表示無

CYCLE

bit

N

 

是否可迴圈

 

2.    建立一個預存程序GetNextSequence,以通過它得到下一個Sequence

參數:

     SeqName Sequence名稱

返回:

     下一個Sequence的值,如出錯,返回0

流程:

1.    該預存程序通過參數SeqName從表Sequence取得LastValue

2.    LastValue加上遞增或遞減值,得到下一個Sequence值(簡稱@NewSeq)

3.    用@NewSeq更新該條記錄

4.    返回@NewSeq

 

主題二:如何通過一個表名得到一個Sequence值

1.    建立一個表TableSequence,儲存表中的列對應的是哪個Sequence

表TableSequence

表名

資料類型

是否為空白

索引

說明

TABLENAME

varchar2(50)

N

PK

表名

SEQNAME

varchar2(50)

N

 

Sequence名

 

2.      建立一個預存程序CreateTableSeq,把表TableSequence的內容放入全域暫存資料表@@TmpTableSequence,以提高效能

參數:

     無

返回:

     無

流程:

1.    判斷暫存資料表@@TmpTableSequence是否存在

2.      如不存在,建立該暫存資料表(表格式同TableSequence),並從TableSequence取得資料, 放入暫存資料表@@TmpTableSequence

3.      建立一個預存程序GetNextSequenceByTableName,以通過它得到下一個Sequence

參數:

      @TableName 表名

返回:

     下一個Sequence的值,如出錯,返回0

流程:

1.    該預存程序通過參數@TableName從表@@TmpTableSequence取得Sequence名(簡稱@SeqName)

2.    通過@SeqName從表Sequence取得LastValue

3.    LastValue加上遞增或遞減值,得到下一個Sequence值(簡稱@NewSeq)

4.      用@NewSeq更新表Sequnce的對應記錄
返回@NewSeq


以上是理論,稍後,我會給出具體做法。

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。