我想在SQL Server中生成一个模式。
e.g。 PA0001
并每次递增(意味着如果PA0001已经生成,则下一个应该是PA0002,依此类推)。
我不知道该怎么做!
有人可以帮忙吗?
答案 0 :(得分:0)
规范方法是使用一个indentity列,然后将此代码创建为计算列:
create table . . . (
inc int not null identity(1, 1),
. . .
code as ('PA' + right('0000' + cast(inc as varchar(255)), 4)
这仅适用于一个前缀 - 如果您希望所有值都以0001开头。如果您有多个前缀,则可以:
答案 1 :(得分:0)
你可以写成:
create table Test
(
ID int identity not null primary key,
pattern varchar(100)
)
Go
create function Nextpattern (@id int)
returns varchar(20)
as
begin
return 'PA' +
CONVERT(VARCHAR(10), GETDATE(), 110) + right('00' + convert(varchar(10), @id), 2)
end
--Solution 1:
Go
alter table Test add Newpattern as dbo.Nextpattern(ID)
Go
insert into Test values (1)
Go
--solution2:
-- not good as what if two processes attempt to
-- add a row to the table at the exact same time?
create function dbo.fnNextpattern()
returns varchar(20)
as
begin
declare @lastval varchar(20)
set @lastval = (select max(pattern) from Test)
if @lastval is null set @lastval = 'PA' +
CONVERT(VARCHAR(10), GETDATE(), 110) + '01'
declare @i int
set @i = right(@lastval,2) + 1
return 'PA' +
CONVERT(VARCHAR(10), GETDATE(), 110)+ right('00' + convert(varchar(10),@i),2)
end
go