首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SQL创建唯一标识符

使用SQL创建唯一标识符
EN

Stack Overflow用户
提问于 2011-01-26 18:08:20
回答 3查看 7.4K关注 0票数 3

是否有一些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表示文件放入存储的年份)

非常感谢您提供的任何指针

EN

回答 3

Stack Overflow用户

发布于 2011-01-26 18:10:23

SQL Server函数newid()将生成一个GUID

您的SQL查询不会生成按钮或其他任何内容。SQL是一种用于查询数据库的语言,而不是用于编写软件接口的语言。

票数 11
EN

Stack Overflow用户

发布于 2011-01-26 22:39:55

我认为可能是因为问题的最初措辞造成了误解。

我现在设想,您需要一个流程,其中每个办公室都需要能够在每次处理文件时单击按钮生成新的保证序列号?

然后跟踪序列中的任何间隙,以调查潜在的丢失文件。对吗?

如果是这样的话,您可以使用类似下面的代码来生成数字。

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2011-01-27 07:04:51

我会使用带有创建日期的row_number函数。如果是批量插入,那么还需要在row_number函数中按id列进行排序。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4803305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档