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

有一个表,其关键字段为ID,如:   
IDName
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 


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值