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存储过程的更多相关文章

  1. SQlSERVER生成唯一编号

    基数表-用来存储编号前缀和类型 建表如下 CREATE TABLE [dbo].[SerialNo]( [sCode] [varchar](50) NOT NULL, [sName] [varchar ...

  2. PHP实现生成唯一编号(36进制的不重复编号)

    当我们要将一个庞大的数据进行编号时,而编号有位数限制,比如5位的车牌号.10位的某证件号码.订单流水号.短网址等等,我们可以使用36进制计算出符合位数的不重复的编号. 我们将0-Z(012345678 ...

  3. c#生成唯一编号方法记录,可用数据库主键 唯一+有序

    数据库主键目前主要有两种: a.自增数值型 优:占用空间小,插入快,有序对索引友好,易懂 缺:多数据库迁移会有重复键值问题,有可能爆表 b.GUID 优:多数据库唯一 缺:占用空间大,无序对索引不友好 ...

  4. Mysql表中唯一编号的分配机制

    最近遇到一个问题:高并发环境下,如何避免MYSQL一张表里的某些列不要重复. 同其他博友一样 https://blog.csdn.net/jacketinsysu/article/details/51 ...

  5. 用SQL存储过程生成唯一单据号

    用SQL存储过程生成唯一单据号     在一些系统中,经理要生成单据号,为了不使多台客户端生成的单据号重复,一般要在服务端生成这种流水号,本文是在数据库中生成流水号,并且可以生成多种类型的单据号(比如 ...

  6. SQL存储过程生成顺序编码

    一.第一种方式 USE [WJKC]GO/****** Object:  StoredProcedure [dbo].[Address_GetCode1]    Script Date: 2016/3 ...

  7. SQL 存储过程生成

    use workflow; GO /****** 对象: StoredProcedure [dbo].[pro_GenerateProGet] 脚本日期: 08/03/2012 11:26:43 ** ...

  8. java生成唯一的id编号

    GUID是一个128位长的数字,一般用16进制表示.算法的核心思想是结合机器的网卡.当地时间.一个随即数来生成GUID.从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义 ...

  9. 【SQL-自动生成编号】按规则自动生成单据编号 以及并发问题_使用触发器、函数 等

    描述:每种单据新建时,自动生成它的单据编号. 规则如:固定码+日期+流水号 (ABC1603180001) 方法一:触发器 触发器的缺点是,执行了sql之后才看到编码. 测试:流水号不能超过最大数,否 ...

随机推荐

  1. JavaScript基础1

    JavaScript写在<script></script>之间   <script type="text/javascript">表示在< ...

  2. Bootstrap3.0学习第十九轮(JavaScript插件——标签页)

    详情请看 http://aehyok.com/Blog/Detail/46.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:ht ...

  3. 一款轻量级移动web开发框架

    本帖最后由 yangzhu230 于 2013-9-11 00:39 编辑 如果我说要推荐zepto你肯定说“切,这地球人都知道,又一个标题党” 不卖关子,开门见山我推荐的是[百度]的GMU GMU是 ...

  4. 配置域主DNS服务器

    一.DNS服务器的类型 ①Primary DNS Server(Master) 一个域的主服务器保存着该域的zone配置文件,该域所有的配置.更改都是在该服务器上进行,本篇随笔要讲解的也是如何配置一个 ...

  5. 软工实践练习一(个人)----将Androidstudio的项目共享到github

    在Androidstudio上使用git插件 将项目共享至github 将 显示共享成功但是出了点问题 项目文件并没有上传至github库中,而是只创建了一个新的库 问题在于我的gitforwindo ...

  6. maven初学(三) SNAPSHOT

    使用场景: 通常一个大型软件是由多个模块组成的,不同的组使用相同应用的不同版本. 在开发阶段,可能经常需要修复bug和优化. 这种情况下就会导致其他组频繁更新代码和pom文件 SANPSHOT SNA ...

  7. Servlet Study 1

    this content below are come from the  JSR154 by sun Just for record purpose. if this relate to some ...

  8. onclik的使用.

    //好笨啊,这个居然忘记了,在行间家onclick事件要加();,addEventListener只要使用函数名字就好了 <!doctype html> <html> < ...

  9. Mysql-字段类型

    首先统计所有,以表格查看 数字类型 列类型 需要的存储量 TINYINT 1 字节 SMALLINT 2 个字节 MEDIUMINT 3 个字节 INT 4 个字节 INTEGER 4 个字节 BIG ...

  10. java系统高并发解决方案(转载)

    转载博客地址:http://blog.csdn.net/zxl333/article/details/8454319 转载博客地址:http://blog.csdn.net/zxl333/articl ...