|
目的: 通过该功能取代 MSSQL 中的表ID列自动递增功能XML:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> CSdn.net/rickelee/admin/EditPosts.ASPx#主题一">主题一:如何通过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
以上是理论,稍后,我会给出具体做法。
|