电脑技术学习

如何获取指定表中指定字段内的可用编号

dn001
在对数据库编程的过程中,许多人经常会用一个ID列标记该记录的信息。但获得一个可用的编号后经常需要频繁的查找以使编号不被打断,本文将主要介绍一个解决此问题的示例,具体内容请参考下文:

/*
过程名 getNum
功能:  取得指定表的下一个可用的编号
输入参数:   @tablName 表名
@FileldName 即要查询的字段名.在不同的表编号所写的列名不是一样的.如有ID Num等
@Num 返回下一个可用的编号  
*/
CREATE PROCEDURE dbo.getNum  
@tablName VARCHAR(8),
@FileldName VARCHAR(8),
@Num  VARCHAR(6) OUTPUT
AS
DECLARE @Sql  VARCHAR(200)
DECLARE @oldNum INT,@newNum VARCHAR(6)
SET @Sql=''  
SET @Sql='DECLARE Mycursor CURSOR FOR   SELECT '+ RTRIM(@FileldName) + 
' FROM ' + RTRIM(@tablName) 
EXEC(@Sql)
IF @@ERROR=0
BEGIN
SET  @oldNum=1
OPEN Mycursor
FETCH NEXT FROM Mycursor INTO @newNum
WHILE @@FETCH_STATUS=0
BEGIN
IF REPLICATE(0,3-LEN(@oldNum))+CAST(@oldNum AS VARCHAR) = @newNum 
SET @oldNum=@oldNum+1
ELSE
BEGIN 
SET @Num=REPLICATE(0,3-LEN(@oldNum))+CAST(@oldNum AS VARCHAR) 
RETURN  
END
FETCH NEXT FROM Mycursor INTO @newNum 
END
CLOSE Mycursor
DEALLOCATE Mycursor
SET @Num=REPLICATE(0,3-LEN(@oldNum))+CAST(@oldNum AS VARCHAR) 
--如果顺序没有被打断
RETURN
END   
ELSE
RAISERROR
('该表或列名不存在.请检查输入的表名和列名是否正确?',7,1)
GO