一个用于获取空ID的SQL Server存储过程

来源:互联网 发布:rpc java php 编辑:程序博客网 时间:2024/05/19 04:02
有一个表,其关键字段为ID,如:    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 


 
原创粉丝点击