目的: 通过该功用取代 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
以上是理论,稍后,我会给出具体做法。