首页 > 数据库 > SQL Server > 正文

在MSSQL中实现Sequence功能

2024-08-31 00:48:06
字体:
来源:转载
供稿:网友


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


以上是理论,稍后,我会给出具体做法。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表