• 一个MSSql的存储过程生成编码,形如HEAD20060512000001;(头+日期+6位递增整数)后面为六位,每新的一年编号重新归0


        这个存储过程的作用是自动生成编号,比如我们在数据库中有个**票编号字段,该存储过程可以生成格式为头(自己定义的一个头,比如AA)+日期(形如20070401)+6位递增整数(形如002254),并且每到了新的一年后面的6位整数便会归0重新开始。其中用到了动态执行sql的方法。参数有四个,需要给出表名称,字段名称,头和一个返回值。
    =============================================
    -- Author:        <vagerent>
    --
     Create date: <2006-12-14>
    --
     Description:    <获取编码,形如HEAD20060512000001;(头+日期+6位整数)后面为六位,每新的一年编号重新

    归0
    >
    -- =============================================
    Create PROCEDURE [dbo].[mp_GetPKNo]
        
    @sTableName varchar(50),
        
    @sFieldName varchar(50),--目标字段
        @sHead varchar(50),--前缀,如Head等
        @sPK varchar(50) out --输出

    AS
    BEGIN
        
    declare @dToday datetime,@sToday varchar(10),
            
    @sYear varchar(10),@sSubID varchar(20),@sSql nvarchar(1000);--动态sql一定要用

    nvarchar!!!
        
        
    set @dToday = getdate();
        
    set @sToday = Convert(varchar,Year(@dToday))
            
    +SubString(Convert(varchar,Month(@dToday)+100),2,2)
            
    +SubString(Convert(varchar,Day(@dToday)+100),2,2);
        
    --select @sToday--形如20060512
        set @sYear=Convert(varchar(10),Year(getdate()))
        
    --select @sYear--形如2006
        
        
    declare @sHead1 varchar(30),@iHeadLength int;
        
    set @sHead1=@sHead+@sYear;--形如HEAD2006
        --select @sHead1;--形如HEAD2006
        set @iHeadLength=Len(@sHead1);
        
    --select @iHeadLength;--形如6
        set @sSql = N'select @sSubID=Max(SubString('
            
    +@sFieldName+','+Convert(varchar(10),@iHeadLength+5)+',6)) from '
            
    +@sTableName+' where SubString('+@sFieldName+',1,'
            
    +Convert(varchar(10),@iHeadLength)+')='''+@sHead1+'''';
        
    --select @sSql;--形如select..
        exec sp_executesql @sSql,N'@sSubID varchar(20) output',@sSubID output;

        
    if ((@sSubID=''or (@sSubID is null))
            
    set @sSubID='000001'
        
    else
        
    begin
            
    declare @iSubID int;
            
    set @iSubID=Convert(int,@sSubID)+1000001;
            
    set @sSubID=SubString(Convert(varchar,@iSubID),2,6)
        
    end
        
    --select @sSubID;
        set @sPK=@sHead+@sToday+@sSubID;

    return
    END
  • 相关阅读:
    安装VMware Workstation提示the msi failed的解决办法
    windows2008中没有右键个性化
    delphi调用AdoQuery实现SqlSever的存储过程(返回)
    delphi 如何解决假死
    用A4打印总账,预览及打印无表头。。
    解决VMWare“Could not get vmci driver version句柄无效”的错误
    第一章 认识jQuery
    jQuery $.each用法
    jquery ui tabs详解(中文)
    javascript面向对象
  • 原文地址:https://www.cnblogs.com/vagerent/p/696708.html
Copyright © 2020-2023  润新知