产生自增长ID的存储过程

以下为sql server的存储过程:
create procedure Pro_GenerateID
(
@tableName varchar(50),        --要产生递增号的表名
@columnName varchar(50),       --要产生递增号的列名
@signID varchar(20)            --标记符,如是以G-1,G-2,G-3...形式递增,如果给@signID传递'G-'则返回G-4

)
as
declare @signLength int, --@signID的长度
@strScript varchar(800),  --产生递增id的sql字符串
@strIntScript varchar(200)  --当前表最大ID号的sql字符串

set @signLength = len(@signID)

select @strIntScript='cast(substring(' + @columnName +
',' + cast((@signLength + 1) as varchar(20)) + ',(select max(len(' + @columnName + ')) from ' + @tableName +')-' +cast(@signLength as varchar(20)) + ') as int)'

select @strScript='select top 1 (''' + @signID + ''' + cast((' + @strIntScript + '+1) as varchar(20))) as id from ' + @tableName + ' where left(' + @columnName + ',' + cast(@signLength as varchar(20)) + ')=''' + @signID + ''' order by ' + @strIntScript + ' desc'
select @strScript='if(exists(select * from ' + @tableName  + ' where ' + @columnName + ' like ''' + @signID + '%''))
' + @strScript +'
else 
select ''' + (@signID +'1') + ''' as id'

print @strScript
exec(@strScript)
如果在ccc表中没有数据
执行此存储过程:exec Pro_GenerateID 'ccc','c1','G-'
显示结果为:
id     
------ 
G-1     
(返回 1 行)







在c#中定义类可以写:
Public Class GenerateIncreaseID{
    public static string GetNewID(string tableName,string columnName,string signID){
           SqlConnection con = new SqlConnection("...");
           SqlCommand com = new SqlCommand("Pro_GenerateID",con);
           com.CommandType = CommandType.StoredProcedure;
   com.Parameters.Add(new SqlParameter("@tableName",tableName));
   com.Parameters.Add(new SqlParameter("@columnName",columnName));
   com.Parameters.Add(new SqlParameter("@signID",signID));
   try{
               con.Open();
               return com.ExecuteScalar().ToString();
           }
           catch(Exception ex){
               throw(ex);
           }
           finally{
               if(con.State == ConnectionState.Open){
                  con.Close();
               }
               con = null;
               com = null;
           }
    }
}
调用时只需:
string s = GenerateIncreaseID.GetNewID("ccc","c1","G-");
可以用此方法来生成有规则主键,表中标识符等.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值