SQL生成唯一对象ID

时间:2015-03-20 11:33:00

标签: sql sql-server tsql objectid

如果多个客户端都使用此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

1 个答案:

答案 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