在MSSQL中实现Sequence功能 – 『MS SQL SERVER』 – 火木华丁 – Powered by Discuz!

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

引文来源  在MSSQL中实现Sequence功能 – 『MS SQL SERVER』 – 火木华丁 – Powered by Discuz!