如果多个客户端都使用此sql生成下一个objectID,那么它们是否可以获得相同的objectID?是否有一些行业标准代码可以供我们使用?谢谢
self doWriteSql: 'SET TRANSACTION ISOLATION LEVEL SERIALIZABLE'.
someRows := self executeSqlSelect:
RETRY:
BEGIN TRANSACTION
BEGIN TRY
SELECT IDENTIFIER FROM IDENTIFIERTABLE WHERE TYPE = ',aType printString,'
UPDATE IDENTIFIERTABLE SET IDENTIFIER = IDENTIFIER + ',anIncrement printString,' WHERE TYPE = ',aType printString,'
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
IF ERROR_NUMBER() = 1205
BEGIN
WAITFOR DELAY ''00:00:00.05''
GOTO RETRY
END
END CATCH
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED'.
^someRows first first asInteger
您发布的内容乍一看似乎足够好,尽管正如我的评论和NeilMoss`所说,已经有了创建唯一标识符的内置方法。
GUID-
身份
将其中一个作为主键将确保您永远不会有重复的记录。GUID(全局唯一标识符)看起来像这样:
declare @guid uniqueidentifier
set @guid = newId()
select @guid
-- 9BA52CDD-C2E3-4660-9E48-3661DD0B45FD
每次运行时都会返回不同的值。
Integer Identity将从指定的值开始,并根据指定的值递增。
create table test (id int primary key identity(1,1))
标识从1开始,每次尝试插入后都会增加一。注意关键字尝试-您不一定总是有一个标识列增长为1、2、3、4、5。它可以是1、3、4、5——如果第2行的事务插入由于某种原因失败,则默认跳过标识。
当涉及到GUID和身份时,可以就"我应该使用哪一个"进行争论,因为每一个都有自己的位置-这些文章似乎涵盖了很多关于使用哪一种以及何时使用的信息:
http://blog.codinghorror.com/primary-keys-ids-versus-guids/http://databases.aspfaq.com/database/what-should-i-choose-for-my-primary-key.html