如果多个客户端都使用此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
答案 0 :(得分:3)
你发布的内容一目了然,但就像我的评论和NeilMoss所说的那样,已经内置了创建唯一标识符的方法。
GUID
身份
将其中一个作为主键将确保您永远不会有重复记录。 GUID(全局唯一标识符)如下所示:
declare @guid uniqueidentifier
set @guid = newId()
select @guid
-- 9BA52CDD-C2E3-4660-9E48-3661DD0B45FD
每次运行时都会返回不同的值。
整数标识将从指定的值开始,并根据指定的内容递增。
create table test (id int primary key identity(1,1))
标识从1开始,并在每次尝试插入后增加1。请注意关键字尝试 - 您不一定总是会将标识列增长为1,2,3,4,5。如果事务插入行,则可能会变为1,3,4,5。 2由于某种原因失败,将默认跳过身份。
当谈到GUID与身份时,可以对“我应该使用哪些”进行争论,因为每个人都有自己的位置 - 这些文章似乎涵盖了很多关于使用哪些内容以及何时使用的信息: / p>
http://blog.codinghorror.com/primary-keys-ids-versus-guids/ http://databases.aspfaq.com/database/what-should-i-choose-for-my-primary-key.html