生成唯一编号(序列号)--sql存储过程
CREATE procedure [dbo].[P_Sys_GetSerialNo] --取业务序列号
@SeqType int, --序列号类别,4位数,如:10+2+1 即1021
@GetCount int=1 , --要取的编号数
@IDList varchar(8000) out, --返回的序号列表
@ErrNum int=0 out, --执行错误号
@ErrMsg varchar(200) out --错误信息
as
declare
@tableNameA varchar(50),
@FieldNameA varchar(50),
@liCurrID int,
@liLength int,
@liCount int,
@liCurrLength int,
@lsID varchar(50),
@lsTmp varchar(20) set @IDList=''
set @ErrNum=0
if @SeqType<1000 or @SeqType>=10000
begin
set @ErrNum=1
set @ErrMsg='参数@SeqType的值不正确,必须为四位数的整数!'
return
end if @GetCount<1 or @GetCount>100
begin
set @ErrNum=1
set @ErrMsg='参数@GetCount必须是大于0且小等于100的数字!'
return
end set @tableNameA=Upper('GetSerialNo_'+Ltrim(Str(@SeqType)));
set @FieldNameA=convert(varchar(10),getdate(),112)
set @FieldNameA=RIGHT(@FieldNameA,6) --目的:允许重复读,以降低两个连接同时读相同的值,造成流水号重复的可能性。
BEGIN tran
select @liCurrID=isnull(nCount,0),@liLength=isnull(nLengthd,6)
from TAB_AutoNumber WITH(updlock)
where vcTableName=@tableNameA and vcFieldName=@FieldNameA IF @@rowcount=0
BEGIN
SET @liCurrID=ISNULL(@liCurrID,0)
SET @liLength=ISNULL(@liLength,6) insert into TAB_AutoNumber(vcTableName,vcFieldName,vcPrefixs,vcSuffixs,nCount,nLengthd)
values(@tableNameA,@FieldNameA,'','',1,6)
select @liCurrID=1,@liLength=6
END update TAB_AutoNumber set nCount=@liCurrID+@GetCount
where vcTableName=@tableNameA and vcFieldName=@FieldNameA
COMMIT tran if @@error<>0
begin
set @ErrNum=2
set @ErrMsg='更新最大编号出错!'
return
END
/*
begin tran
if exists(select vcTableName from TAB_AutoNumber with(nolock) where vcTableName=@tableNameA and vcFieldName=@FieldNameA)
begin
select @liCurrID=isnull(nCount,0),@liLength=isnull(nLengthd,6)
from TAB_AutoNumber with(updlock) where vcTableName=@tableNameA and vcFieldName=@FieldNameA
end else
begin
insert into TAB_AutoNumber(vcTableName,vcFieldName,vcPrefixs,vcSuffixs,nCount,nLengthd)
values(@tableNameA,@FieldNameA,'','',1,6)
select @liCurrID=1,@liLength=6
end
update TAB_AutoNumber set nCount=@liCurrID+@GetCount
where vcTableName=@tableNameA and vcFieldName=@FieldNameA
if @@error<>0
begin
set @ErrNum=2
set @ErrMsg='更新最大编号出错!'
return
end
commit tran
*/
set @IDList=''
set @liCount=@liCurrID
while @liCount<@liCurrID+@GetCount
begin
set @lsID=Ltrim(Str(@liCount))
begin
set @liCurrLength=Len(@lsID)
if @liCurrLength<@liLength
set @lsTmp=Replicate('',@liLength-@liCurrLength)
else
set @lsTmp=''
--set @lsTmp='9'+RIGHT(@lsTmp,LEN(@lsTmp)-1)
set @IDList=@IDList+','+@FieldNameA+Ltrim(Str(@SeqType))+@lsTmp+@lsID
end
set @liCount=@liCount+1
end
set @IDList=Substring(@IDList,2,len(@IDList)-1) ---示范
--Declare @vcShoppingCartCNO varchar(30)
--Declare @ErrNum varchar(30)
--Declare @ErrMsg varchar(30)
----- 1001 用户注册
----- 1002 订单类
----- 1003 财务类
--exec P_Sys_GetSerialNo 1001,1,@vcShoppingCartCNO OUT,@ErrNum OUT,@ErrMsg OUT
--print @vcShoppingCartCNO
-- --
-- select * from tab_AutoNumber
-- delete tab_AutoNumber ----------------------------------------------------------------------------------------- CREATE PROC [dbo].[P_Sys_GetSerialNoBy]
@ntype int,
@SerialNo varchar(20) out
as
BEGIN
Declare @vcShoppingCartCNO varchar(30)
Declare @ErrNum varchar(30)
Declare @ErrMsg varchar(30)
--- 1001 用户类
--- 1002 企业类
--- 1003 财务类
--- 1004 简历
--- 1005 职位
--- 1006 其他
exec P_Sys_GetSerialNo @ntype,1,@vcShoppingCartCNO OUT,@ErrNum OUT,@ErrMsg OUT
set @SerialNo=@vcShoppingCartCNO END --Declare @vcShoppingCartCNO varchar(30)
--Declare @ErrNum varchar(30)
--Declare @ErrMsg varchar(30)
----- 1001 用户注册
----- 1002 订单类
----- 1003 财务类
--exec P_Sys_GetSerialNo 1001,1,@vcShoppingCartCNO OUT,@ErrNum OUT,@ErrMsg OUT
--print @vcShoppingCartCNO ------------------------------------------------------------------------------------
/**创建表**/
if exists (select * from sysobjects where id = OBJECT_ID('[tab_AutoNumber]') and OBJECTPROPERTY(id, 'IsUserTable') = 1)
DROP TABLE [tab_AutoNumber] CREATE TABLE [tab_AutoNumber] (
[vcTableName] [varchar] (50) NOT NULL,
[vcFieldName] [varchar] (20) NOT NULL,
[vcPrefixs] [varchar] (20) NULL,
[vcSuffixs] [varchar] (20) NULL,
[nLengthd] [smallint] NULL,
[nCount] [int] NOT NULL,
[vcMemos] [varchar] (50) NULL) ALTER TABLE [tab_AutoNumber] WITH NOCHECK ADD CONSTRAINT [PK_tab_AutoNumber] PRIMARY KEY NONCLUSTERED ( [vcTableName],[vcFieldName] ) ------------------------------------------------------------------------------------
/**执行**/
DECLARE @strNumberKey VARCHAR(20)
EXEC P_Sys_GetSerialNoBy '',@strNumberKey out
生成唯一编号(序列号)--sql存储过程的更多相关文章
- SQlSERVER生成唯一编号
基数表-用来存储编号前缀和类型 建表如下 CREATE TABLE [dbo].[SerialNo]( [sCode] [varchar](50) NOT NULL, [sName] [varchar ...
- PHP实现生成唯一编号(36进制的不重复编号)
当我们要将一个庞大的数据进行编号时,而编号有位数限制,比如5位的车牌号.10位的某证件号码.订单流水号.短网址等等,我们可以使用36进制计算出符合位数的不重复的编号. 我们将0-Z(012345678 ...
- c#生成唯一编号方法记录,可用数据库主键 唯一+有序
数据库主键目前主要有两种: a.自增数值型 优:占用空间小,插入快,有序对索引友好,易懂 缺:多数据库迁移会有重复键值问题,有可能爆表 b.GUID 优:多数据库唯一 缺:占用空间大,无序对索引不友好 ...
- Mysql表中唯一编号的分配机制
最近遇到一个问题:高并发环境下,如何避免MYSQL一张表里的某些列不要重复. 同其他博友一样 https://blog.csdn.net/jacketinsysu/article/details/51 ...
- 用SQL存储过程生成唯一单据号
用SQL存储过程生成唯一单据号 在一些系统中,经理要生成单据号,为了不使多台客户端生成的单据号重复,一般要在服务端生成这种流水号,本文是在数据库中生成流水号,并且可以生成多种类型的单据号(比如 ...
- SQL存储过程生成顺序编码
一.第一种方式 USE [WJKC]GO/****** Object: StoredProcedure [dbo].[Address_GetCode1] Script Date: 2016/3 ...
- SQL 存储过程生成
use workflow; GO /****** 对象: StoredProcedure [dbo].[pro_GenerateProGet] 脚本日期: 08/03/2012 11:26:43 ** ...
- java生成唯一的id编号
GUID是一个128位长的数字,一般用16进制表示.算法的核心思想是结合机器的网卡.当地时间.一个随即数来生成GUID.从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义 ...
- 【SQL-自动生成编号】按规则自动生成单据编号 以及并发问题_使用触发器、函数 等
描述:每种单据新建时,自动生成它的单据编号. 规则如:固定码+日期+流水号 (ABC1603180001) 方法一:触发器 触发器的缺点是,执行了sql之后才看到编码. 测试:流水号不能超过最大数,否 ...
随机推荐
- php模式设计之 注册树模式
在前两篇单例模式和工厂模式后,终于迎来了最后一个基础的设计模式--注册树模式. 什么是注册树模式? 注册树模式当然也叫注册模式,注册器模式.之所以我在这里矫情一下它的名称,是因为我感觉注册树这个名称更 ...
- Bootstrap系列 -- 22. 按钮详解
Bootstrap框架首先通过基础类名“.btn”定义了一个基础的按钮风格,然后通过“.btn-default”定义了一个默认的按钮风格.默认按钮的风格就是在基础按钮的风格的基础上修改了按钮的背景颜色 ...
- node 日志
我们主动控制的log4js,还有一些日志是继承好的,错误日志了,进程日志了,请求日志了. 1. var express = require('express');var logger = requir ...
- LINUX下软件包的安装与使用
1.安装RPM包 rpm -ivh 包全名 2.查询某个包是否安装 rpm -q 包名 3.查询已安装的包的信息(主要看版本) rpm -qi 包名 4.查询已安装包的安装位置 rpm -ql 包名 ...
- C#基础知识系列五(构造函数)
前言 本节主要来学习下实例构造函数.私有构造函数和静态构造函数. 构造函数的作用: 1.当一个类在new实例化对象时,可调用构造函数进行初始化对象. 2.不带参数的构造函数称为“默认构造函数”. 无论 ...
- SqlDependency数据库同步+signalr 推送消息
sqlDependency提供了这样一种能力:当被监测的数据库中的数据发生变化时,SqlDependency会自动触发OnChange事件来通知应用程序,从而达到让系统自动更新数据(或缓存)的目的. ...
- 50个提高PHP编程效率的方法
用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册 ...
- 团队作业--Beta版本冲刺
项目冲刺随笔 第一天 第二天 第三天 第四天 第五天 第六天 第七天
- LINQ构建交叉表
最近碰到客户的一个需求.使用交叉表来显示客户数据.也就是以同时以行头和列头交叉形式显示数据内容.同时要求即使有些列没有数据,也需要显示该列内容,并设置默认值. 说明: “交叉表”对象是一个网格,用来根 ...
- IntelliJ IDEA 设置 编辑器字体大小
1,打开File->settings 2,在Edit->colors->Fonts下创建新字体 保存即可.