SQL Server自动生成日期加数字的序列号

use master

go

if exists(select * from dbo.sysdatabases where

name=’my_test_database’)

drop database [my_test_database]

go

create database [my_test_database]

go

use [my_test_database]

go

create table [my_table] ([my_id] varchar(16))

go

–存储过程开始



create procedure get_new_id

@new_id varchar(16) output

as

begin

declare @date datetime

declare @yyyy varchar(4)

declare @mm varchar(2)

declare @dd varchar(2)

–保存取得的当前时间



set @date = getdate()

set @yyyy = datepart(yyyy, @date)

set @mm = datepart(mm, @date)

set @dd = datepart(dd, @date)

–位数不够的前面补0

set @yyyy = replicate(‘0’, 4 – len(@yyyy)) + @yyyy

set @mm = replicate(‘0’, 2 – len(@mm)) + @mm

set @dd = replicate(‘0’, 2 – len(@dd)) + @dd

–取出表中当前日期的已有的最大id

set @new_id = null

select top 1 @new_id = [my_id] from [my_table] where [my_id] like

@yyyy+@mm+@dd+’%’ order by [my_id] desc

–如果未取出来

if @new_id is null

–说明还没有当前日期的编号,则直接从1开始编号

set @new_id = (@yyyy+@mm+@dd+’00000001′)

–如果取出来了



else

begin

declare @num varchar(8)

–取出最大的编号加上1



set @num = convert(varchar, (convert(int, right(@new_id, 8)) + 1))

–因为经过类型转换,丢失了高位的0,需要补上

set @num = replicate(‘0’, 8 – len(@num)) + @num

–最后返回日期加编号



set @new_id = @yyyy+@mm+@dd + @num

end

end

go

–执行20次调用及插入数据测试



declare @n int

set @n = 0

while @n < 20

begin

declare @new_id varchar(16)

execute get_new_id @new_id output

insert into [my_table] ([my_id]) values (@new_id)

set @n = @n + 1

end

select * from [my_table]

go

–输出结果

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐