为SQL Server创建Sequence

本文介绍了如何在SQL Server中实现类似Oracle的Sequence功能,以解决自增列无法满足特定格式需求的问题。文章讨论了使用“max+1”方法和Identity列的局限性,并提出了两种方案:一是通过存储过程管理Sequence,二是针对高并发场景的改进方法。重点在于并发性高的情况下,提供一种适用于每秒数千次请求的Sequence创建和管理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为SQL Server创建Sequence

本文主要讲述的是SQL Server实现Oracle的Sequence,如果大家在Oracle数据库里面用惯了- Sequence,要在SQLServe数据库中实现Sequence,就会发现没有现成的Sequence对象可以Create了。那应该怎么办呢?
当然这点小问题是难不倒我们程序员的,“max+1啊”,有人会说这样的方式。是的,这种方式SQLServer实现起来也比较简单。当然你也许还会说,最Sql的方式是采用identity列,自增的方式去增加就ok了。
但是这样的列如果要实现“YYYYMMDD”+“部门编号(如ZX)”+Sequence值 (例如:20100707ZX000002)的格式就不行了。还是老老实实用存储过程来取得一个Sequence值吧,使用起来也就随心所欲了。
网上常见的一个存储过程为 为当前库所有用到Sequence建一张表,譬如“SEQ_SERIAL_NO”,内含四个字段【名字,起点值,递增值,当前值】,创建Sequence的时候就创建一条记录,获取Sequence的时候就从对应行的当前值按递增值增加得到。
在并发性请求不那么高的系统里,这种过程是没有问题的。但是并发性请求一旦处于某个量级以后,这个过程常常会遇到问题。
以下为一个改进方法,适合于高吞吐量的访问请求,比如每秒数千次的请求:
假定要给ORDER表的SerialNo字段创建一个Sequence
创建表SEQ_SERIAL_NO

代码块

-- 创建表SEQ_SERIAL_NO
create table SEQ_SERIAL_NO(
    seqid 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值