`
sunjing21
  • 浏览: 157707 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

sql server实现oracle序列

 
阅读更多

oracle中的序列蛮好用的,但是在sqlserver中却没有,您也许会说我可以用IDENTITY来代替啊!当然可以,但是一个表中只能有一个IDENTITY字段!我要是想在一个表里使用多个类似IDENTITY的字段呢?如是oracle,用序列就可以实现,只要给该字段指定一个序列就可以了!在SQLSERVER中如何实现呢?SQL2000可以有自定义函数,我们可以自定义一个函数,来产生一个序列,然后在给需要使用该序列的字段指定该函数即可!下面是一个例子:
假设:
存在表
CREATE TABLE tmp
(
identityID INT identity(1,1) PRIMARY KEY,
iID INT,
sName CHAR(2)
)
GO
其中identityID是一个IDENTITY字段,
我们创建以下函数:
CREATE FUNCTION sqlSequence()
RETURNS INT
AS
BEGIN
DECLARE @MINNUM INT
DECLARE @MAXNUM INT
SET @MINNUM=2
SET @MAXNUM=99
/*
您可以设置该函数允许的最大(99)、小(2)值,代表从取2-99,超过此最大值返回0(您可以加上自己的处理),
仿oracle的sequence中的设置
*/
RETURN( SELECT CASE
WHEN ISNULL(MAX(iID),@MINNUM-1)+1 >@MAXNUM THEN 0
ELSE ISNULL(MAX(iID),@MINNUM-1)+1
END
FROM TMP)
END
GO
然后给表tmp的字段iID的默认值指定为dbo.sqlSequence(),
然后再插入时使用如下语句即可
insert into tmp(sname) values('1');
插入一些记录后看看效果吧!
其实还可以给该函数加上更多的功能,如可以返回一个降序的序列,
也可以返回一个字符串的序列。

分享到:
评论

相关推荐

    sqlserver中创建类似oracle序列的存储过程

    介绍sqlserver中创建类似于oracle中序列的过程,此例只是一个简单的模仿。

    sqlserver实现oracle的sequence方法

    当然你也许还会说,最Sql的方式是采用identity列,自增的方式去增加就ok了。但是这样的列如果要实现“YYYYMMDD”+Sequence值 (例如:2008072400001)的格式就不行了。还是老老实实用存储过程来取得一个Sequence值吧...

    oracle中用序列实现自动增长值

    在sqlserver中,可以用identity实现自动增长值,但在oracle中,没有identity,可以用其它的实现,这里就是用序列实现的自动增长值。

    sql2005教程

    sqlserver2005教程SQLSERVER2005中Reporting Service执行日志的读取方法 恢复SQL2005误删除的数据 SQL2005 Management Studio 之 SSMS Field Types of SQL Server 2005 SQL Server 2005和SQL Server 2000数据的...

    SQLServer 2005移植到oracle前提

    导入作业的前提,必须建立的表,序列和导入的数据

    Oracle点滴积累

    expimp导出导入工具的使用.doc,Oracle 单记录函数.doc,...SQLServer和Oracle常用函数对比.doc,关系型数据库及其设计方法.doc,视图、同义词和序列.doc,索引与约束.doc,详细讲述Oracle中的to_date参数含义.doc

    Oracle 实现类似SQL Server中自增字段的一个办法

    由于Oracle中没有类似SQL Server中的自增字段,所以我们如果想要通过设定类似ID性质的唯一列的话,需要借助Oracle的sequence,先建立一个序列,然后在每次插入数据的时候,通过前触发器来更新ID值,并将序列的序号加...

    经典SQL脚本大全

    │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整tempdb数据库的文件属性.sql │ ├─第02章 │ │ 2.1 日期概念理解中的一些测试.sql │ │ ...

    LiquibaseMavenDemo:使用SpringDataJPA + Liquibase + MySQL + ORACLE + SQLSERVER进行序列自增整合

    使用MAVEN,Liquibase,SQL_SERVER / ORACLE / MYSQL,Quartz,JPA,SpringBoot进行项目开发 配置文件中的源数据库和目标数据库是:将源数据库复制到目标中,目标生成什么就生成什么changeSet #生成差异文件,需要...

    Navicat Premium操作手册.7z

    4PostgreSQL 触发器99PostgreSQL 触发函数100PostgreSQL 类型102PostgreSQL...SQL Server 对象115SQL Server 备份或还原(只限于完整版本)120SQL Server 备份120SQL Server 还原122SQL Server 模式123SQL Server 表124...

    oracle database 10g 完整参考手册part1

    第Ⅰ部分 核心数据库概念 第1章 Oracle Database 10g体系结构 第2章 安装Oracle Database 10g和创建数据库 ...第45章 Oracle Application Server 10g的旅行者指南 第46章 数据库管理旅行者指南 第47章 XML旅行者指南

    模仿Oracle中SQL Server身份列

    本文介绍如何使用序列来模仿Oracle中SQL Server身份列。

    SQL 宝典 国外经典 中文版

    本书始终围绕SQL标准和三大主要RDBMS(Oracle、IBM DB2和Microsoft SQL Server 2008)之间不同的实现而展开,详细介绍这三大供应商与标准之间的区别以及它们的特定实现。除了SQL的基本功能和用途外,本书还说明了SQL...

    SQL 宝典 [美]Alex Kriegel, Boris M.Trukhnov【著】

    本书始终围绕SQL标准和三大主要RDBMS(Oracle、IBM DB2和Microsoft SQL Server 2008)之间不同的实现而展开,详细介绍这三大供应商与标准之间的区别以及它们的特定实现。除了SQL的基本功能和用途外,本书还说明了SQL...

    oracle 重置序列从指定数字开始的方法详解

    本文将详细介绍oracle 重置序列从指定数字开始的方法,有需求的朋友可以参考

    Oracle_Data_Integrator应用指南

    4.1. Oracle to SQL Server 45 4.2. SQL Server to Oracle 46 4.3. XML to Oracle 47 5. Sequence、Variable、User Function、Procedure 50 5.1. 作用域 50 5.2. Variable变量 50 5.3. Sequence序列 51 5.4. User ...

    Mycat-server-1.6-RELEASE源码

    支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常见SQL语法 遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。 基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster...

    PL/SQL Developer

    如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL Developer侧重于易用性、代码品质和生产力,充分发挥Oracle应用程序开发过程中的主要...

Global site tag (gtag.js) - Google Analytics