目的: 通过该功能取代 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!