sqlserver实现oracle的sequence方法
当然这点小问题是难不倒我们程序员的,“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的语句中直接使用。
相关推荐
-
分享ORACLE SEQUENCE跳号总结
在ORACLE数据库中,序列(SEQUENCE)是使用非常频繁的一个数据库对象,但是有时候会遇到序列(SEQUECNE)跳号(skip sequence numbers)的情形,那么在哪些情形下会遇到跳号呢? 事务回滚引起的跳号 不管序列有没有CACHE.事务回滚这种情况下,都会引起序列的跳号.如下实验所示: SQL> create sequence my_sequence 2 start with 1 3 increment by 1 4 maxvalue 99999 5 nocache;
-
Oracle创建自增字段--ORACLE SEQUENCE的简单使用介绍
先假设有这么一个表: 复制代码 代码如下: create table S_Depart ( DepartId INT not null, DepartName NVARCHAR2(40) not null, DepartOrder INT default 0, constraint PK_S_DEPART primary key (DepartId) ); 在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方. 1.Create Sequen
-
Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例
问题:在SQL Server数据库中,有自增列这个字段属性,使用起来也是很方便的.而在Oracle中却没有这个功能,该如何实现呢? 答:在Oracle中虽然没有自增列的说法,但却可以通过触发器(trigger)和序列(sequence)来模式实现. 示例: 1.建立表 复制代码 代码如下: create table user ( id number(6) not null, name varchar2(30) not null primary key )
-
Hibernate Oracle sequence的使用技巧
一.为表创建自增长自段有两种,一种是不同的表使用各自的Sequence,方法如下: 1.在Oracle sequence首先创建sequence create sequence seq_idminvalue 1start with 1increment by 1cache 20; 2.在你的hbm.xml中的配置 seq_id 这样再插入数据的时候,Hibernate会自动生成如下语句: hibernate: select seq_id.nextval from dual hibernate:
-
详解ORACLE SEQUENCE用法
在oracle中sequence就是序号,每次取的时候它会自动增加.sequence与表没有关系. 1.Create Sequence 首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限. 创建语句如下: CREATE SEQUENCE seqTest INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXvalue -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10; --设置缓存ca
-
oracle sequence语句重置方介绍
在开发过程中,可能会用到oracle sequence语句,本文以oracle sequence语句如何重置进行介绍,需要的朋友可以参考下Oracle重置sequence语句1 Sql代码 复制代码 代码如下: DECLARE n NUMBER(10 ); tsql VARCHAR2(100 ); p_seqName varchar2(20 ); BEGIN p_seqName := 'SEQ_RUN_ID'; EXECUTE IMMEDIATE 'SELECT ' || p_seqName |
-
sqlserver实现oracle的sequence方法
当然这点小问题是难不倒我们程序员的,"max+1啊",有人会说这样的方式.是的,这种方式实现起来也比较简单.当然你也许还会说,最Sql的方式是采用identity列,自增的方式去增加就ok了.但是这样的列如果要实现"YYYYMMDD"+Sequence值 (例如:2008072400001)的格式就不行了.还是老老实实用存储过程来取得一个Sequence值吧,使用起来也就随心所欲了. 网上常见的一个存储过程为 为当前库所有用到Sequence建一张表,譬如"
-
详解SQLServer和Oracle的分页查询
不管是DRP中的分页查询代码的实现还是面试题中看到的关于分页查询的考察,都给我一个提示:分页查询是重要的.当数据量大的时候是必须考虑的.之前一直没有花时间停下来好好总结这里.现在又将Oracle视频中关于分页查询的内容看了一遍,发现很容易就懂了. 1.分页算法 最开始我在网上查找资料的时候,看到很多分页内容,感觉很多很乱.其实不是这样.网上那些资料大同小异.问题出在了我自己这里.我没搞明白进行分页的前提是什么?我们都知道只要有分页都会涉及这些变量:每页又多少条记录(pageSize).当
-
C#连接Oracle数据库的方法
本文实例讲述了C#连接Oracle数据库的方法.分享给大家供大家参考.具体实现方法如下: //1.添加引用 System.data.oracleClient //2.设置连接字符串 data source是服务名(也就是在客户端sqlplus中需要输入的主机字符串) //3.以下用法和sqlserver Access 用法一直 string strConn = "data source=oamis;user=scott;password=tiger;"; OracleConnectio
-
SqlServer事务语法及使用方法详解
事务是关于原子性的.原子性的概念是指可以把一些事情当做一个不可分割的单元来看待.从数据库的角度看,它是指应全部执行或全部不执行的一条或多条语句的最小组合.为了理解事务的概念,需要能够定义非常明确的边界.事务要有非常明确的开始和结束点.SqlServer中的每一条select.insert.update.delete语句都是隐式事务的一部分.即使只发出一条语句,也会把这条语句当做一个事务-或执行语句的所有内容或什么都不执行.但是如果需要的不只是一条,而是多条语句呢?在这种情况下,就需要有一种方法来
-
使用PL/SQL Developer连接Oracle数据库的方法图解
之前因为项目的原因需要使用Oracle数据库,由于时间有限没办法从基础开始学习,而且oracle操作的命令界面又太不友好,于是就找到了PL/SQL Developer这个很好用的软件来间接使用数据库. 下面简单介绍一下如何用这个软件连接Oracle数据库. 第一步 安装Oracle Database和PL/SQL Developer 这一步网上有很多的教程就不详细介绍.Oracle可以直接到官网去下载,在安装中注意几个问题就行: 1.一定要记住自己全局数据库名字和口令,这个在后面连接的时候很重要
-
SQLServer与Oracle常用函数实例对比汇总
一.数学函数 1.绝对值 复制代码 代码如下: S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) 复制代码 代码如下: S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual 3.取整(小) 复制代码 代码如下: S:select floor(-1.001) value O:select floor(-1.001) value from
-
Mybatis调用Oracle存储过程的方法图文详解
1:调用无参数的存储过程. 创建存储过程: Mapper.xml 配置:经测试其他标签(update.insert.select)也可以. Mapper.java MapperTest.java 测试 2:有参数的存储过程调用: 2.1存储过程的创建: 2.2Mapper.xml 的配置: 2.3Mapper.java 2.4MapperTest.java 测试 控制台输出: 3:存储过程的结果集调用. 3.1创建存储过程: 3.2 Mapper.xml 配置 配置 resultMap结果集字段
-
java基于odbc连接oracle的实现方法
本文实例讲述了java基于odbc连接oracle的实现方法.分享给大家供大家参考,具体如下: 1.加载 oracle驱动 oracle.jdbc.driver.OracleDriver 2.建立到给定数据库 URL 的连接 jdbc:oracle:thin:@localhost:1521:orcl 3.默认的用户名是system,密码是自己设定的,不能用sys或者是sysdba,这个只是角色. public void testOracle() { try { Class.forName("or
-
mysql、mssql及oracle分页查询方法详解
本文实例讲述了mysql.mssql及oracle分页查询方法.分享给大家供大家参考.具体分析如下: 分页查询在web开发中是最常见的一种技术,最近在通过查资料,有一点自己的心得 一.mysql中的分页查询 注: m=(pageNum-1)*pageSize;n= pageSize; pageNum是要查询的页码,pageSize是每次查询的数据量, 方法一: select * from table order by id limit m, n; 该语句的意思为,查询m+n条记录,去掉前m条,返
-
Python使用cx_Oracle调用Oracle存储过程的方法示例
本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法.分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL. 首先,在数据库端创建简单的存储过程. create or replace procedure test_msg(i_user in varchar2, o_msg out varchar2) is begin o_msg := i_user ||', Good Morning!'; end; 然后,开始在Pytho
随机推荐
- ASP 处理JSON数据的实现代码
- DB2中的数据移动(一)
- MongoDB的安装及配置文件选项全解
- Java使用cookie显示最近查看过的书
- Java文件(io)编程_基于File类的基本用法(必看篇)
- 基于oracle中锁的深入理解
- Python函数参数类型*、**的区别
- js如何获取网页所有图片
- IE中createElement需要注意的一个问题
- php下载远程文件类(支持断点续传)
- ASP中UBOUND与LUBOUND的使用方法
- 提供几个关于采集的函数(ASP)
- 通过过滤器(Filter)解决JSP的Post和Request中文乱码问题
- C#实现HTML转WORD及WORD转PDF的方法
- javascript 操作select下拉列表框的一点小经验
- php获取网页请求状态程序示例
- 原码, 反码与补码基础知识详细介绍
- SqlServer与MongoDB结合使用NHibernate
- jquery 单击li防止重复加载的实现代码
- Android使用TextView跑马灯效果