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