--流水号格式: 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
解决方案 »
- 新建立一张统计学生数的表scount,里面只有一个列student_count,要求创建一个触发器,使得学生表S每增加一个学生,表scount的student_count的值就增加1,每删除一个学生, ,表scount的student_count值就减少1
- 急,sql server连不上
- 有图求解,两个db_datawriter有什么区别阿?
- 请教一个复杂SQL查询问题,谢谢!
- 让Label在页面载入时显示SQLDatesource取得的数据,错在哪里?
- 这两个表做统计(特急) 在线等
- sql server+asp构架网站
- <----------ORA-01126 Problem--------->
- 关于SQL SERVER中的实现表记录循环的问题
- 求日立显示器件(苏州)有限公司软件工程师(数据库编程)笔试题目!分数全部奉送!
- 菜鸟求大神解答分离附加问题
- 情帮忙看下事务语法对错。
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'
代码不是解决你的问题的,不过比较通用,你自己看看来改吧