在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
以上是理論,稍後,我會給出具體做法。