在MSSQL中实现Sequence功能
发表于:2007-07-02来源:作者:点击数:
标签:
目的: 通过该功能取代 MSSQL 中的表ID列自动递增功能 主题一:如何通过Sequence名得到一个Sequence值 方法: 1. 创建一个表Sequence,保存Sequence的值 2. 创建一个存储过程GetNextSequence,以通过它得到下一个Sequence 主题二:如何通过一个表名得到一个Sequenc
目的: 通过该功能取代 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
以上是理论,稍后,我会给出具体做法。
原文转自:http://www.ltesting.net