日期:2014-05-18 浏览次数:21267 次
DROP PROCEDURE PRO_AutoLSH 2 GO 3 CREATE PROCEDURE PRO_AutoLSH 4 ( 5 @letter varchar(10), --首字母,可以多个字母 6 @LSHkey varchar(20), --表中的流水号列名,最好是主键 7 @tablename varchar(20) --表名 8 ) 9 AS 10 begin 11 DECLARE @LSHID NVARCHAR(20) 12 DECLARE @TLSH VARCHAR(20) 13 DECLARE @NUM INT 14 DECLARE @sql NVARCHAR(200) 15 ----查询该表最大的流水号 16 SET @sql='SELECT ISNULL(MAX(CONVERT(INT,SUBSTRING('+@LSHkey+',8,4))),0)+1 FROM '+@tablename 17 --创建临时表 18 CREATE TABLE TEMP1(TOTAL INT); 19 --写入查询得到的数据 20 INSERT INTO TEMP1 EXEC(@sql); 21 --再查询出值 22 SET @NUM=(SELECT TOTAL FROM TEMP1) 23 DROP TABLE TEMP1 24 --拼接下一个流水号:J+年份4位+月份2位+4位编号(如J2010120001) 25 SET @TLSH=@letter+SUBSTRING(CONVERT(VARCHAR(100),GETDATE(),112),1,6)+SUBSTRING(CONVERT(CHAR(5),10000+@NUM),2,4) 26 SET @sql='' 27 SET @sql='SELECT @LSH='+''''+@TLSH+''''+' FROM '+@tablename 28 29 EXEC sp_executesql @sql,N'@LSH NVARCHAR(20) OUTPUT',@LSHID OUTPUT SELECT @LSHID 30 end --SQL 生成流水号,参考
------解决方案--------------------
/* 功能:利用函数创建流水号如: fx201005260001, fx201005260002, fx201005270001 作者:陈永建 创建时间:2010-05-26 */ use master go if(db_id('NumberDB')is not null) drop database NumberDB go create database NumberDB GO USE NumberDB go if(object_id('number')is not null) drop table number go create table number ( id varchar(50) not null, CreateDate datetime not null ) go select * from number --创建函数生成流水号 if(object_id('fun_CreateNum')is not null) drop function fun_CreateNum go --@profix 前缀 --@dateFormat 日期格式如20050512 :获取当天的日期 --@length 长度:根据你的实际需求来填写你的长度(交易量少则长度短些) create function fun_CreateNum(@profix varchar(10),@dateFormat varchar(20),@length int) returns varchar(100) as begin declare @MyNo varchar(100) select @MyNo= max(id) from number where datediff (dd,CreateDate,getdate())=0 --得到当天最大流水号 --isnull(目标参数,设置的值):如果目标参数为空则变为设定值 set @MyNo=convert(int,isnull(right(@MyNo,@length),0))+1 --如果今天有记录,则在最大的流水号上加1 --replicate(设定值,重复次数): 将设定值重复 set @MyNo=right(replicate(0,@length)+@MyNo,@length)--将@MyNo前加0后截取相应的位数 set @MyNo=@profix+@dateFormat+@MyNo--拼接成流水号 return @MyNo end go --调用函数 --convert(varchar(20),getdate(),112):112将日期格式设置为如:20050512格式 select dbo.fun_CreateNum('fx',convert(varchar(20),getdate(),112),5) --将流水号插入数据表中 insert into number values(dbo.fun_CreateNum('fx',convert(varchar(20),getdate(),112),5),getdate()) go select * from number