安全的tsql编号技术



stackOverflowers你好!

我想知道是否有一种安全的方式,在交易中像身份一样的一系列数字。我唯一的目的是分组表中的行,我不是指row_number()。我提出了一个简单的问题,这安全吗?该表有自己的标识键

declare @mynextSecuenceNumber int
    select @mynextSecuenceNumber=isnull(max(secuencenumber+1),1) from mytable
insert into mytable (productID,customer,secuencenumber) values (@someval,@anotherval,@mynextSecuenceNumber)

编辑

背景

这样做的原因如下:

首先我收到汽配汽车服务然后我生成一个门票,recepcion(我可以接待一个,两个,三个汽车零部件)后来我可以继续在行业为同一该特定汽车服务提供者或从不同的供应商,但我希望能够重新生成事件或机票,否则我将最终查询服务和所有相关的汽车零部件供应商,我不知道我收到在操作和事件除此之外,我还需要另一个特定的id,用于与该汽车服务关联的所有autoparts。

顺便说一下,我在SQL server 2008

小心

使用身份作为序列号可能会很混乱,因为事务在回滚后会增加值以及其他问题,因此请注意,由于提供的方法是我接受的答案,我可以找到另一种与事务相处的方式它第一个出现在链接

当SQL 2012或更高版本不是一个选项时,这是Microsoft的可扩展建议,但您需要在目标表中管理序列号而不需要标识。这将创建一个单独的表来跟踪序列号,让我们来完成一些繁重的工作,并通过清理来保持表的最小大小。如果这个负载变得太大,您可以在非高峰时间安排一些清理工作。

-- Create table for tracking the sequence
create table <tablename> (
      SeqID int identity(1,1) primary key
)
GO
-- Create procedure to return next sequence value
create procedure GetNewSeqVal_<tablename>
    @NextValue int output
as
begin
    declare @NewSeqValue int
    set nocount on
    insert into <tablename> DEFAULT VALUES
    set @NewSeqValue = scope_identity()
    delete from <tablename> with (readpast)
    set @NextValue = @NewSeqValue
end
go
-- Get next sequence
declare @seqId int
exec GetNewSeqVal_<tablename> @NextValue = @seqId OUTPUT

更多信息:http://blogs.msdn.com/b/sqlcat/archive/2006/04/10/sql-server-sequence-number.aspx

最新更新