在涉及创建和删除记录的更多并发用户的应用程序中讨论以下关于性能的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
答案 0 :(得分:1)
您应该从不使用“select max()+ 1”来获取唯一ID。第一个原因是,对于并发用户,该值绝对没有保证是唯一的 - 两个同时在任何地方运行的用户最终会得到相同的值。不要这样做。永远。这就是为什么存在自动数和序列之类的原因。