[骚年,求教生成流水号问题,也许你懂的]

雷肿么了 2012-09-05 06:13:15

--流水号格式: yyMMdd+0001 自增,
--有相同的CO1,CO2则使用相同的流水号
--如果存在同一天的流水号就自增,比如有1209050001 的流水号记录,则从1209050002 开始生成,没有就从yyMMdd0001开始
CREATE TABLE #TMP
(
ID VARCHAR(10),
SerialNumber int, --流水号
CO1 VARCHAR(10),
CO2 VARCHAR(20)
)
INSERT INTO #TMP SELECT '0001',1209050001,'GG','MM'
INSERT INTO #TMP SELECT '0002',null,'AA','BB'
INSERT INTO #TMP SELECT '0003',null,'FF','DD'
INSERT INTO #TMP SELECT '0004',null,'CC','BB'
INSERT INTO #TMP SELECT '0005',null,'AA','BB'

--最后显示效果
--0001, 1209050001,GG,MM
--0002, 1209050002,AA,BB
--0003, 1209050003,FF,DD
--0004, 1209050004,CC,BB
--0005, 1209050002,AA,BB

...全文
134 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
雷肿么了 2012-09-05
  • 打赏
  • 举报
回复
貌似解决不了我这问题啊,  亲。
以学习为目的 2012-09-05
  • 打赏
  • 举报
回复
参考下筱筱澄总结的 生成流水号
雷肿么了 2012-09-05
  • 打赏
  • 举报
回复
不知道有没有更优的解决办法。
雷肿么了 2012-09-05
  • 打赏
  • 举报
回复
嗯,多谢楼上。
發糞塗牆 2012-09-05
  • 打赏
  • 举报
回复
use tempdb  
go
--创建当天序号表
create table tabSN(sn int,sndt datetime)
go
--创建历史序号表
create table tabSNHist(sn INT,sndt datetime)
go

--
create proc uspSN
(
@sn char(14) output
)
as
--开始事务
set xact_abort on
begin transaction

--判断序号表是否有数据,若没有则新增一条数据
if (select count(1) from tabSN)=0
begin
insert into tabSN values(000000,GETDATE())
end

--取出序号表中的日期
DECLARE @sndt datetime
set @sndt=(select sndt from tabSN);

--判断是否发生跨天情况,,若是则移动到历史表
if CONVERT(char(10),@sndt,111)<>CONVERT(char(10),getdate(),111)
begin
insert into tabSNHist select * from tabSN;
truncate table tabSN;
insert into tabSN values(000000,getdate())
end
--将号码累加1,作为最后操作时间
update tabsn set sn=sn+1 ,sndt=GETDATE()
--出去序号,转换成YYYYMMDDNNNNNN
SELECT @sn=CONVERT(VARCHAR(10),SNDT,112)+RIGHT('000000'+CONVERT(VARCHAR(6),SN),6)
FROM tabSN;
COMMIT TRANSACTION
GO


--使用存储过程产生序号
DECLARE @SN CHAR(14)
EXEC uspSN @SN OUTPUT
SELECT @SN 'SN'

代码不是解决你的问题的,不过比较通用,你自己看看来改吧

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧