存储过程--自动生成有日期的序列号(头可自己定义)
2016-03-10 16:49
423 查看
--=============================================
-- Author: <vagerent>
-- Create date: <2006-12-14>
-- Description: <获取编码,形如HEAD20060512000001;(头+日期+6位整数)后面为六位,每新的一年编号重新归0>
-- =============================================
-- Author: <vagerent>
-- Create date: <2006-12-14>
-- Description: <获取编码,形如HEAD20060512000001;(头+日期+6位整数)后面为六位,每新的一年编号重新归0>
-- =============================================
alter 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)--加100为了预防03月份前面的0没了,此处103后取第二位开始的两位 +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);--形如HEAD2006的长度 set @sSql = N'select @sSubID=Max(SubString(' +@sFieldName+','+Convert(varchar(10),@iHeadLength+5)+',6)) from '--000002最大的后六位,避免重复 +@sTableName+' where SubString('+@sFieldName+',1,' +Convert(varchar(10),@iHeadLength)+')='''+@sHead1+''''; --select @sSql;--形如select..先找到有HEAD开头的序列号,然后取出后六位 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;--前面添加多一位预防0丢失 set @sSubID=SubString(Convert(varchar,@iSubID),2,6)--取出最终想要的000001-999999序列号 end --select @sSubID; set @sPK=@sHead+@sToday+@sSubID; return END
相关文章推荐
- 对视频播放软件KMplayer的评价
- 方阵逆时针旋转
- Volley源码个人分析
- jersey常用的注解类型
- ssl/tls
- 关于javascript的this的几道题
- Swift 基础学习(构造方法初印象)
- 使用UIVisualEffectView为视图添加特殊效果
- 数学2016.2.18
- YII 邮件发送功能
- 9280开发板设置一个开机启动程序后,串口中断无法输入的解决方法
- 安装ionic时报错问题及解决办法
- 有人离职时经理的反应是?
- java实现大整数的四则运算
- nginx安装问题 libpcre.so.1解决
- 如何学习R语言?
- 我是一只IT小小鸟读后感
- CSS基本样式二
- CakePHP 3.2插件引入插件篇
- JS打印指定区域内容