一个MSSql的存储过程---生成编码,形如HEAD20060512000001;(头+日期+6位递增整数)后面为六位,每新的一年编号重新归0
2007-04-02 10:58
711 查看
这个存储过程的作用是自动生成编号,比如我们在数据库中有个**票编号字段,该存储过程可以生成格式为头(自己定义的一个头,比如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
=============================================
-- 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
相关文章推荐
- mysql存储过程,根据日期产生序列号{日期最为序列号前缀,后面数字依次递增。当日期变化(即前缀变化)后面数字重新从一开始}
- 生成订单编号,编号格式(由编号类型编码+编号创建平台编码+6位日期+时间戳后4位+4位随机数组成),生成四位或者N位随机数字
- mysql 存储过程实例 (日期以小时递增 while loop循环嵌套 随机数生成)
- 好久没来了。共享一个自动生成编号的存储过程
- MSSQL生成 Insert 语句的 存储过程。
- 得用SQL语句生成某个库下所有存储过程脚本,并每个存为一个文件
- 根据日期+顺序号生成流水号的存储过程
- 一个可调用某表新增日期列的存储过程
- MSSQL:存储过程-实现两个表中取出头两行,然后合并到一个表中
- 利用SQL存储过程生成程序编号的一种方法
- mssql 存储过程学习中 [3] 动态生成SQL
- 存储过程的作用是自动生成编号
- 通用存储过程: 生成某一个表分页的存储过程
- 存储过程随机生成字符串、将long值格式化成字符串日期
- SQL2005重新生成索引的的存储过程 sp_rebuild
- 66.6 设计一个雇员类 employee,存储雇员的姓名、编号和生日等信息,要求该类使用 上一题设计的日期类作为成员对象。雇员类的使用如下: //定义一个雇员,其雇员号为 10,生日为 1970 年
- SQL SERVER 2008存储过程生成编号,JDBC调用
- 一个自动产生编号的存储过程,数据库sql2000或2005
- 编写一个函数,从标准输入读取一列整数,把这些值存储于一个动态分配的数组中并返回这个数组。函数通过观察EOF判断输入列表是否结束。数组的第一个数是数组包含的值的个数,他的后面就是这些整数值。
- 把list<Map>根据日期重新生成一个list<Map>