是否有一些SQL编码可以在点击获取默认按钮时生成唯一标识符?我正在寻找一个系统,在物理纸质文件存入存储之前对其进行编号。问题是有3个办公室,每个办公室都需要一个序号系统(即P001,P002,P003和C001,C002 ......)。
以下是我到目前为止为唯一身份证号码生成前缀的代码。
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表示文件存入存储的年份)
任何指针都非常赞赏
答案 0 :(得分:11)
SQL Server函数newid()
将生成GUID。
您的SQL查询不会生成按钮或其他任何内容。 SQL是一种用于查询数据库的语言,而不是用于编写软件接口的语言。
答案 1 :(得分:0)
我认为这个问题的初步措辞可能会引起误解。
我现在设想您需要一个流程,每个办公室每次处理文件时,只需点击一下按钮就能生成新的保证序号?
然后跟踪序列中的任何间隙以调查潜在的丢失文件。这是对的吗?
如果是这样,你可以使用这样的东西来生成数字。
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
答案 2 :(得分:0)
我将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 @records