使用以下查询创建Integer主键值

时间:2014-06-26 17:47:07

标签: sql sql-server

在涉及创建和删除记录的更多并发用户的应用程序中讨论以下关于性能的SQL查询。目标是创建连续的主键整数值。

Table name: SitePage

Column DataType
--------- -----------

PageID BigINT

PageName nchar(10)

查询以插入新记录

DECLARE @intFlag INT
SET @intFlag = 0
WHILE (@intFlag =0)
BEGIN
BEGIN TRY
Insert into SitePage (PageID, PageName) values ((Select max(PageID)+1  from SitePage), CONCAT('Page ID : ', (Select max(PageID)+1  from SitePage)));
set @intFlag = @@rowcount
END TRY
BEGIN CATCH
SET @intFlag=0
END CATCH

END
GO
  1. 我们不想对主键使用自动增量整数值 因为以下几点 reason
  2. 我们也不想使用SEQUENCE
  3. 我们无法追踪旗帜272

1 个答案:

答案 0 :(得分:1)

您应该从不使用“select max()+ 1”来获取唯一ID。第一个原因是,对于并发用户,该值绝对没有保证是唯一的 - 两个同时在任何地方运行的用户最终会得到相同的值。不要这样做。永远。这就是为什么存在自动数和序列之类的原因。