是否有一些SQL编码可以在单击get default按钮时生成唯一标识符?我正在寻找一个系统,以编号物理纸质文件之前,他们被放入存储。问题是有3个办公室,每个办公室都需要一个序列号系统(即P001,P002,P003和C001,C002...)。
下面是我到目前为止用来生成唯一id号前缀的代码。
SELECT CASE WHEN ptBranch=3 THEN 'P' WHEN ptBranch=4 THEN 'A' ELSE 'C' END + CONVERT(VARCHAR(2),GETDATE(),12) FROM LAMatter WHERE ptMatter = $Matter$
我们的想法是,代码可以生成整个文件编号,例如P110001,P110002 (其中P,C或A表示文件所在的办公室,11表示文件放入存储的年份)
非常感谢您提供的任何指针
发布于 2011-01-26 18:10:23
SQL Server函数newid()将生成一个GUID。
您的SQL查询不会生成按钮或其他任何内容。SQL是一种用于查询数据库的语言,而不是用于编写软件接口的语言。
发布于 2011-01-26 22:39:55
我认为可能是因为问题的最初措辞造成了误解。
我现在设想,您需要一个流程,其中每个办公室都需要能够在每次处理文件时单击按钮生成新的保证序列号?
然后跟踪序列中的任何间隙,以调查潜在的丢失文件。对吗?
如果是这样的话,您可以使用类似下面的代码来生成数字。
CREATE TABLE Sequences
(
OfficeCode char(1) primary key,
SequenceNumber int NOT NULL DEFAULT (0)
)
INSERT INTO Sequences(OfficeCode)
SELECT 'P' UNION ALL SELECT 'C' UNION ALL SELECT 'A'
GO
CREATE PROC dbo.GetSequence
@OfficeCode char(1),
@val AS int OUTPUT,
@n as int =1
AS
UPDATE dbo.Sequences
SET @val = SequenceNumber = SequenceNumber + @n
WHERE OfficeCode = @OfficeCode;
SET @val = @val - @n + 1;
GO
DECLARE @val int
EXEC dbo.GetSequence 'C', @val output
select @val发布于 2011-01-27 07:04:51
我会使用带有创建日期的row_number函数。如果是批量插入,那么还需要在row_number函数中按id列进行排序。
declare @records table (id int identity(1,1), CreationDate datetime, Name varchar(50), Section char(1), FileID varchar(10))
insert into @records (CreationDate, Name, Section)
select '2011-01-26 16:57:49', 'abc','p'
insert into @records (CreationDate, Name, Section)
select '2011-01-26 16:57:50', 'def','p'
insert into @records (CreationDate, Name, Section)
select '2011-01-26 16:58:00', 'ghi','c'
insert into @records (CreationDate, Name, Section)
select '2011-01-26 16:58:50', 'jkl','d'
insert into @records (CreationDate, Name, Section)
select '2011-01-26 16:58:51', 'mno','c'
insert into @records (CreationDate, Name, Section)
select '2011-01-26 16:58:52', 'pqr','p'
insert into @records (CreationDate, Name, Section)
select '2011-01-26 16:58:53', 'def','p'
update @records
set FileID=a.FileID
from
(
select id,
Section + cast(row_number() over (partition by Section order by CreationDate, Section) as varchar(10)) as FileID
from @records
) a
inner join @records b
on a.id=b.id
select * from @recordshttps://stackoverflow.com/questions/4803305
复制相似问题