MS-SQL怎的给一个表产生流水号的条码
MS-SQL怎样给一个表产生流水号的条码?
如题有一个表A:
A01(序号) A02(编号) A03(条码)
-----------------------------------------------
001 a01 C1406190008
002 a03
003 a04
...
想根据最后表的最后一个条码字段,依次往后产生条码,比如A03最后一个条码是C1406190008,那么产生的其它的条码应该往下排C1406190009,C1406190010...
------解决方案--------------------
你的A03(条码) 是16进制的吗?如果是16进制的,先取最大的: A03(条码) ,然后加1 。。。
如果不是16进制的,就取整数位转化为int型+1 然后再强制类型转化为varchar 跟前面的字符去拼接
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
如题有一个表A:
A01(序号) A02(编号) A03(条码)
-----------------------------------------------
001 a01 C1406190008
002 a03
003 a04
...
想根据最后表的最后一个条码字段,依次往后产生条码,比如A03最后一个条码是C1406190008,那么产生的其它的条码应该往下排C1406190009,C1406190010...
------解决方案--------------------
你的A03(条码) 是16进制的吗?如果是16进制的,先取最大的: A03(条码) ,然后加1 。。。
如果不是16进制的,就取整数位转化为int型+1 然后再强制类型转化为varchar 跟前面的字符去拼接
------解决方案--------------------
create table test(编号 nvarchar(20))
DECLARE @Sequence varchar(4)
SET @Sequence = RIGHT(
(
SELECT MAX(编号)
FROM test
WHERE 编号 LIKE 'C'+ CONVERT(varchar(100),GETDATE(), 12) + '%'
),
4
)
IF @Sequence IS NOT NULL
BEGIN
insert test values('C'+CONVERT(varchar(100),GETDATE(),12)+ right(cast(power(10,4) as varchar)+convert(int,@Sequence)+1,4))
END
ELSE
BEGIN
insert test values('C'+CONVERT(varchar(100),GETDATE(),12)+'0001')
END
select * from test
/*
C1406190001
C1406190002
*/
------解决方案--------------------
create table 表A
(A01 varchar(10),A02 varchar(10),A03 varchar(20))
insert into 表A
select '001','a01','C1406190008' union all
select '002','a03','' union all
select '003','a04',''
-- 更新
update a
set a.A03=left(b.x,1)+rtrim(cast(stuff(b.x,1,1,'') as bigint)+b.r)
from 表A a
inner join
(select a.A01,
(select top 1 A03 from 表A b where b.A01<a.A01) 'x',
row_number() over(order by a.A01) 'r'
from 表A a
where a.A03='') b on a.A01=b.A01
-- 结果
select * from 表A
/*
A01 A02 A03
---------- ---------- --------------------
001 a01 C1406190008
002 a03 C1406190009
003 a04 C1406190010
(3 row(s) affected)
*/
------解决方案--------------------
----------------------------------------------------------------
-- Author :DBA_HuangZJ(发粪涂墙)
-- Date :2014-06-19 16:11:53
-- Version:
-- Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
-- Apr 2 2010 15:48:46
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[huang]
if object_id('[huang]') is not null drop table [huang]
go
create table [huang]([A01] nvarchar(6),[A02] nvarchar(6),[A03] nvarchar(22))
insert [huang]
select '001','a01','C1406190008' union all
select '002','a03',null union all
select '003','a04',null
--------------生成数据--------------------------