在MSSQL中实现Sequence功能

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

返回 :

下一

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus