sql(2008)生成流水号的问题!!!sequence

拉了拉 2018-08-01 08:13:52
2008sql没有sequence
我要的sequence是:表名字+创建年份+三位数的流水号
比如
2018表名001
2018表名002
....

这样的代码如何写?


...全文
543 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
RINK_1 2018-08-02
  • 打赏
  • 举报
回复
引用 5 楼 weixin_42341925 的回复:
declare @x1 int, @y1 char(8) select @x1= COUNT(CharNo) from TestNo where CAST(DT as date)=CAST(GETDATE() as date) if(@x1=0) begin select @y1=SUBSTRING(convert(char(8),getdate(),112),1,4) insert TestNo(CharNo,DT) values( 'company'+@y1+'001' ,GETDATE()) end else begin insert TestNo(CharNo,DT) values( 'company'+cast((select MAX(CAST( SUBSTRING(charno,8,12) as int ))+1 from TestNo where CAST(DT as date)=CAST(GETDATE() as date))as varchar(50)) ,GETDATE()) end select * from TestNo 但是 这个第一个流水号 有空格 而插入第二个没发建立了,因为说不能将‘2008 001’转化为digint值 是不是因为空格??请问要怎么改
把@y1 char(8)改成 varchar(8)试试,char类型是定长,不足会加空格。
拉了拉 2018-08-02
  • 打赏
  • 举报
回复
declare
@x1 int,
@y1 char(8)
select @x1= COUNT(CharNo) from TestNo where CAST(DT as date)=CAST(GETDATE() as date)
if(@x1=0)
begin
select @y1=SUBSTRING(convert(char(8),getdate(),112),1,4)
insert TestNo(CharNo,DT) values(
'company'+@y1+'001'
,GETDATE())
end
else
begin

insert TestNo(CharNo,DT) values(
'company'+cast((select MAX(CAST( SUBSTRING(charno,8,12) as int ))+1 from TestNo where CAST(DT as date)=CAST(GETDATE() as date))as varchar(50))
,GETDATE())
end
select * from TestNo


但是 这个第一个流水号 有空格
而插入第二个没发建立了,因为说不能将‘2008 001’转化为digint值

是不是因为空格??请问要怎么改
zjcxc 2018-08-02
  • 打赏
  • 举报
回复
一般是自己做一个,1楼的方法并不那么可靠,无法保证唯一的
RINK_1 2018-08-02
  • 打赏
  • 举报
回复
引用 7 楼 weixin_42341925 的回复:
[quote=引用 6 楼 RINK_1 的回复:] [quote=引用 5 楼 weixin_42341925 的回复:] declare @x1 int, @y1 char(8) select @x1= COUNT(CharNo) from TestNo where CAST(DT as date)=CAST(GETDATE() as date) if(@x1=0) begin select @y1=SUBSTRING(convert(char(8),getdate(),112),1,4) insert TestNo(CharNo,DT) values( 'company'+@y1+'001' ,GETDATE()) end else begin insert TestNo(CharNo,DT) values( 'company'+cast((select MAX(CAST( SUBSTRING(charno,8,12) as int ))+1 from TestNo where CAST(DT as date)=CAST(GETDATE() as date))as varchar(50)) ,GETDATE()) end select * from TestNo 但是 这个第一个流水号 有空格 而插入第二个没发建立了,因为说不能将‘2008 001’转化为digint值 是不是因为空格??请问要怎么改
把@y1 char(8)改成 varchar(8)试试,char类型是定长,不足会加空格。 现在不管subsrting(charno,17,20)里的数字怎么改 ,都一直插入是相同的!! 甚至我写1,20 也是相同的 请问是哪里错了?+1写错了吗?[/quote] 试试下面的。

CREATE TABLE #T
(CHARNO VARCHAR(20),
 DT date)


Declare 
 @x1 int,
 @y1 char(8)
 select @x1= COUNT(CharNo) from #T where CAST(DT as date)=CAST(GETDATE() as date)
 select @y1=SUBSTRING(convert(char(8),getdate(),112),1,4)
 if(@x1=0)
 begin
 select @y1=SUBSTRING(convert(char(8),getdate(),112),1,4)
 insert #T(CharNo,DT) values(
 @y1+'company'+'001'
 ,GETDATE())
 end
 else
 begin

   insert #T(CharNo,DT) values(
 @y1+'company'+
 right('000'+cast((select MAX(CAST(SUBSTRING(charno,16,20) as bigint ))+1 from #T where CAST(DT as date)=CAST(GETDATE() as date))as varchar(50)),3)
 ,GETDATE())
 end
拉了拉 2018-08-02
  • 打赏
  • 举报
回复
引用 6 楼 RINK_1 的回复:
[quote=引用 5 楼 weixin_42341925 的回复:]
declare
@x1 int,
@y1 char(8)
select @x1= COUNT(CharNo) from TestNo where CAST(DT as date)=CAST(GETDATE() as date)
if(@x1=0)
begin
select @y1=SUBSTRING(convert(char(8),getdate(),112),1,4)
insert TestNo(CharNo,DT) values(
'company'+@y1+'001'
,GETDATE())
end
else
begin

insert TestNo(CharNo,DT) values(
'company'+cast((select MAX(CAST( SUBSTRING(charno,8,12) as int ))+1 from TestNo where CAST(DT as date)=CAST(GETDATE() as date))as varchar(50))
,GETDATE())
end
select * from TestNo


但是 这个第一个流水号 有空格
而插入第二个没发建立了,因为说不能将‘2008 001’转化为digint值

是不是因为空格??请问要怎么改


把@y1 char(8)改成 varchar(8)试试,char类型是定长,不足会加空格。
现在不管subsrting(charno,17,20)里的数字怎么改 ,都一直插入是相同的!!

甚至我写1,20 也是相同的 请问是哪里错了?+1写错了吗?
拉了拉 2018-08-01
  • 打赏
  • 举报
回复
引用 1楼二月十六 的回复:
CREATE TABLE testtab
(
ID INT IDENTITY,
PRIMARYKEY AS RTRIM(YEAR(GETDATE()))+'testtab' + RIGHT(1000 + id, 3),
TESTVALUE VARCHAR(50)
);


INSERT INTO dbo.testtab
(
TESTVALUE
)
VALUES
(
'测试1' -- TESTVALUE - varchar(50)
)

SELECT * FROM testtab


sql server(2008)可用吗?
RINK_1 2018-08-01
  • 打赏
  • 举报
回复
持久化计算列
二月十六 2018-08-01
  • 打赏
  • 举报
回复
CREATE TABLE testtab
(
ID INT IDENTITY,
PRIMARYKEY AS RTRIM(YEAR(GETDATE()))+'testtab' + RIGHT(1000 + id, 3),
TESTVALUE VARCHAR(50)
);


INSERT INTO dbo.testtab
(
TESTVALUE
)
VALUES
(
'测试1' -- TESTVALUE - varchar(50)
)

SELECT * FROM testtab


27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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