ID | Name |
1 | 张三 |
2 | 李四 |
如果有多条记录,删除其中某条记录后,这个ID就被空出来了。如删除2号后,ID就使用了1,3,4,...,而2号空出来了。如果要新增加一条记录,希望使用这个空出来的ID号。以下存储过程可以获得第一个空出来的ID号(仅对SQL Server有效,效率不太好,希望有人能给出更高效的办法):
Create Procedure procGetFirstUnusedID
(@TableName varchar(30), -- 表的名字
@IDName varchar(30), -- ID字段名
@UnusedID int output) -- 输出,第一个未使用的ID
As
Declare @Sql nvarchar(4000)
Declare @Count int,
@Max int
Set @Sql = 'Select @Count=Count(' + @IDName + '),@Max=Max(' + @IDName + ') From ' + @TableName
exec sp_executesql @Sql, N'@Count int output, @Max int output ', @Count output, @Max output
if (@Max is null)
Begin
Set @UnusedID=1
return
End
if (@Max = @Count)
Begin
Set @UnusedID=@Max+1
return
End
Set @Sql = 'Select TempID=Identity(int,1,1),' + @IDName + ' Into #KSTemp From ' + @TableName + ' Order by ' + @IDName + ';'
Set @Sql = @Sql + 'Select top 1 @UnusedID=TempID From #KSTemp Where TempID<' + @IDName + ';'
Set @Sql = @Sql + 'Drop Table #KSTemp;'
execute sp_executesql @Sql, N'@UnusedID int output', @UnusedID output
GO