1 sql t-sql sql-server 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
Run Code Online (Sandbox Code Playgroud)
您发布的内容一目了然,尽管就像我的评论和 NeilMoss 所说的那样,已经内置了创建唯一标识符的方法。
用户名
身份
将其中之一作为您的主键将确保您永远不会有重复的记录。GUID(全局唯一标识符)如下所示:
declare @guid uniqueidentifier
set @guid = newId()
select @guid
-- 9BA52CDD-C2E3-4660-9E48-3661DD0B45FD
Run Code Online (Sandbox Code Playgroud)
每次运行它都会返回不同的值。
整数标识将从指定的值开始,并根据指定的值递增。
create table test (id int primary key identity(1,1))
Run Code Online (Sandbox Code Playgroud)
标识从 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