sqlserver实现oracle的sequence方法
发布时间:2024-01-21 01:53:47
当然这点小问题是难不倒我们程序员的,“max+1啊”,有人会说这样的方式。是的,这种方式实现起来也比较简单。当然你也许还会说,最Sql的方式是采用identity列,自增的方式去增加就ok了。但是这样的列如果要实现“YYYYMMDD”+Sequence值 (例如:2008072400001)的格式就不行了。还是老老实实用存储过程来取得一个Sequence值吧,使用起来也就随心所欲了。
网上常见的一个存储过程为 为当前库所有用到Sequence建一张表,譬如“AllSequence”,内含四个字段【名字,起点值,递增值,当前值】,创建Sequence的时候就创建一条记录,获取Sequence的时候就从对应行的当前值按递增值增加得到。
在并发性请求不那么高的系统里,这种过程是没有问题的。但是并发性请求一旦处于某个量级以后,这个过程常常会遇到问题。
以下为一个改进方法,适合于高吞吐量的访问请求,比如每秒数千次的请求:
-- 假定要给T_0101001创建一个Sequence
-- 创建表SeqT_0101001
create table SeqT_0101001(
-- ID列为自增列
SeqID int identity(1,1) primary key,
-- Sequence值
SeqVal varchar(1)
)
-- 创建从SeqT_0101001表获取最新Sequence值的存储过程
create procedure P_GetNewSeqVal_SeqT_0101001
as
begin
-- 声明新Sequence值变量
declare @NewSeqValue int
-- 设置插入、删除操作后的条数显示取消
set NOCOUNT ON
-- 插入新值到SeqT_0101001表
insert into SeqT_0101001 (SeqVal) values ('a')
-- 设置新Sequence值为插入到SeqT_0101001表的标识列内的最后一个标识值
set @NewSeqValue = scope_identity()
-- 删除SeqT_0101001表(不显示被锁行)
delete from SeqT_0101001 WITH (READPAST)
-- 返回新Sequence值
return @NewSeqValue
end
--使用Sequence
Declare @NewSeqVal int
Exec @NewSeqVal = P_GetNewSeqVal_SeqT_0101001
Print @NewSeqVal
要获取刚才我们提到的 “20080724000056”这种格式的话,下面这样就可以了
select Convert(char(8),Getdate(),112) + right('00000'+CAST(@NewSeqVal AS varchar(5)),5) as mySeq
不过还是有用的不爽的一点地方,不能直接在非存储过程的select的语句中直接使用。
猜你喜欢
- 为了自定义一个模板标签,你需要告诉Django当遇到你的标签时怎样进行这个过程。当Django编译一个模板时,它将原始模板分成一个个 节点
- 获取数据(四种方式)1. url: 需要正则去匹配 url(r'^index/(num)/$
- python2.7在内存管理上相比python3还是有些坑的,其释放后的内存仍然保留在python的内存池中,不被系统所用。python循环
- 1:文件内容格式为json的数据如何解析import json,os,syscurrent_dir=os.path.abspath(&quo
- 一. 概念理解你可能有留意到当你浏览网页时,会有一些推送消息,大多数是你最近留意过的同类东西,比如你想买桌子,上淘宝搜了一下,结果连着几天会
- 在python中进行两个整数相除的时候,在默认情况下都是只能够得到整数的值解决方法:1. 修改被除数的值为带小数点的形式即可得到浮点值2.在
- 本文列些处几种去除在Python 列表中(list)可能存在的重复项,这在很多应用程序中都会遇到的需求,作为程序员最好了解其中的
- 如下所示:#先下载pyautogui库,pip install pyautoguiimport os,timeimport pyautogu
- 网站或服务的性能关键点很大程度在于数据库的设计(假设你选择了合适的语言开发框架)以及如何查询数据上。我们知道MySQL的性能优化方法,一般有
- 本文实例讲述了Python使用Pickle库实现读写序列操作。分享给大家供大家参考,具体如下:简介pickle模块实现了用于对Python对
- (1)函数的分类:内置函数:python内嵌的一些函数。匿名函数:一行代码实现一个函数功能。递归函数自定义函数:根据自己的需求,来进行定义函
- 本文实例讲述了asp.net C#实现解压缩文件的方法。一共给大家介绍了三段代码,一个是简单的解压缩单个zip文件,后一个可以解压批量的大量
- 昨天微信小程序(应用号)内测的消息把整个技术社区炸开了锅,我也忍不住跟了几波,可惜没有内测资格,听闻破解版出来了,今天早上就着原来的项目资源
- 本文实例讲述了Python中xml和json格式相互转换操作。分享给大家供大家参考,具体如下:Python中xml和json格式是可以互转的
- <%dim total(7,1) total(1,0)="中国经营报"
- 产品通常分两种,一种是遵循现有用户习惯,一种是颠覆用户习惯。至于什么是用户习惯,你现在用右手还是左手操作鼠标,这就是你的习惯。很多公司团队专
- 想到TDE(Transparent Data Encryption)。 TDE MSDN 说明: “透明数据加密”(TDE) 可对数据和日志
- 在官网下载源码包:https://www.php.net/downloads.php步骤:1、解压命令:tar -xjvf php.tar.
- Python 使用tf-idf算法计算文档关键字权重,并生成词云1. 根据tf-idf计算一个文档的关键词或者短语:代码如下:注意需要安装p
- 不知道工商银行帐号是否是这样的格式, 如果错了请大家见谅!<script language="javascript"