我要生成订单号,格式为:6位日期+3位当日流水号(下一日就重新按001开始)现在我能通过以下sql生成唯一的单号
DECLARE @NowTime nvarchar(20)
DECLARE @FlowId nvarchar(50)
--生成日期号
SET @NowTime = CONVERT(varchar(100), GETDATE(), 12)--生成流水号
SET @FlowId = (
SELECT CASE
WHEN exists
(SELECT * FROM tb WHERE @NowTime =substring(f_id,1,6))
THEN
right('000000'+rtrim(( SELECT isnull(max(right(f_id,3)),0)+1
FROM tb
WHERE @NowTime=substring(f_id,1,6)))
,3)
ELSE
'001' END
)但我发现一个问题,如果我删掉最后一条记录后再插入另一条记录,插入的订单号会是刚刚删除的订单号,但我希望是刚刚删除的订单号的下一个号,请问如何解决?
DECLARE @NowTime nvarchar(20)
DECLARE @FlowId nvarchar(50)
--生成日期号
SET @NowTime = CONVERT(varchar(100), GETDATE(), 12)--生成流水号
SET @FlowId = (
SELECT CASE
WHEN exists
(SELECT * FROM tb WHERE @NowTime =substring(f_id,1,6))
THEN
right('000000'+rtrim(( SELECT isnull(max(right(f_id,3)),0)+1
FROM tb
WHERE @NowTime=substring(f_id,1,6)))
,3)
ELSE
'001' END
)但我发现一个问题,如果我删掉最后一条记录后再插入另一条记录,插入的订单号会是刚刚删除的订单号,但我希望是刚刚删除的订单号的下一个号,请问如何解决?
解决方案 »
- 求一触发器,因子表数据而去更改主表
- select 名字,性别,年龄 from 学生情况表 order by 3 desc 3在这个语句中的作用是什么呢
- 求条sql查询语句
- 一个查询问题
- 請假SQL語句
- 变量获取不到值, YBM_TABLE为空 导致下面的错误对象名 'System.Data.DataRowView' 无效。
- 数据导入出现的问题,请高手指点,解决即结帖
- 不知各位大哥是否遇到过这样的情况?
- 急急急!在 SQL Server6.5 ,用大写字母建立的表,要求不能用小写字母读写,如何设置?
- ***求查询特殊字符过程***
- 数据库备份问题
- 求解:win7 (windows 7)下SQL Server管理器无法连接到远程SQL数据库
ID PID
1 0911200001 当天时间091120+0001
2 0911200002 当天时间091120+0002
依次类推
0911210001 第二天又是取当前时间+0001
0911210002 第二天又是取当前时间+0002
依次类推
0911220001 第二天又是取当前时间+0001
.......
这个要怎么实现哦!!!帮帮忙(ID不用管,只求那个编号)
-------------------create table tb(ID int IDENTITY,PID varchar(20), PID2 varchar(20))
gocreate trigger my_trig on tb FOR INSERT
as
begin
declare @cnt as int
select @cnt = count(1) from tb where pid = (select pid from inserted)
update tb set pid2 = pid + right('0000'+cast(@cnt as varchar),4) where id = (select id from inserted)
end
goinsert into tb(pid) values('091120')
insert into tb(pid) values('091120')
insert into tb(pid) values('091121')
insert into tb(pid) values('091121')select * from tbdrop table tb/*ID PID PID2
----------- -------------------- --------------------
1 091120 0911200001
2 091120 0911200002
3 091121 0911210001
4 091121 0911210002(所影响的行数为 4 行)
*/
你自己改一改 或者写个函数作为计算列的值
CREATE TABLE tb (id INT IDENTITY(1,1),
id1 AS RIGHT('000000'+RTRIM(id),6),col1 VARCHAR(1))
INSERT tb SELECT 'a' UNION
SELECT 'b'
DELETE FROM tb WHERE id=2
INSERT tb SELECT 'c'
SELECT * FROM tb/*
id id1 col1
----------- ------------ ----
1 000001 a
3 000003 c
*/
插入的时候返回自增长ID,和上一次的进行比较,
如果是相邻的就加1,否则就加上间隔。
大意是这意思,可能有语法错误,LZ看看能满足不?
DECLARE @NowTime nvarchar(20)
DECLARE @FlowId nvarchar(50)--DECLARE @q int 上次的最后的ID--set @q =(select max(id) from tb where 条件(当日))
--insert ............. --生成日期号
SET @NowTime = CONVERT(varchar(100), GETDATE(), 12)
if(@@identity-@q)=1
--生成流水号
begin
SET @FlowId = (
SELECT CASE
WHEN exists
(SELECT * FROM tb WHERE @NowTime =substring(f_id,1,6))
THEN
right('000000'+rtrim(( SELECT isnull(max(right(f_id,3)),0)+1
FROM tb
WHERE @NowTime=substring(f_id,1,6)))
,3)
ELSE
'001' END
)
end
else
begin
SET @FlowId = (
SELECT CASE
WHEN exists
(SELECT * FROM tb WHERE @NowTime =substring(f_id,1,6))
THEN
right('000000'+rtrim(( SELECT isnull(max(right(f_id,3)),0)+(@@identity-@q)--改动
FROM tb
WHERE @NowTime=substring(f_id,1,6)))
,3)
ELSE
'001' END
)
end