产生自增长ID的存储过程
2004-06-25 20:01
316 查看
以下为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-");
可以用此方法来生成有规则主键,表中标识符等.
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-");
可以用此方法来生成有规则主键,表中标识符等.
相关文章推荐
- 最近用oracle写了个产生ID号得存储过程,有类似需求的可以参考
- sql语句 返回最后的insert操作所产生的自动增长的id
- oracle主键自动增长的实现 Oracle Sequence oracle maxid自动生成--ORA-00001: 违反唯一约束条件 (NAME.SYS_C005547)产生的原因之一(select * from all_cons_columns w
- SQL视图里面产生自增长的ID号
- MongoDB自增长ID的实现
- oracle下创建id自增长
- 将excel导入sql数据库 id自增长
- 在SQLite数据库中获取新插入数据自增长的ID值
- id主键自增长那些事
- postgresql 存储过程 返回刚插入id值
- mysq id 子增长值获取
- Mybatis获取插入记录的自增长ID
- mybatis中插入数据自动返回自增长id的配置
- SQL SERVER中的三种获得自增长ID的方法
- Oracle实现插入记录ID自增长
- 在SQLite数据库中获取新插入数据自增长的ID值和插入的时候注意些什么?
- mysql insert_select ID 自增长
- ibatis配置(mysql数据库) 新增一条记录后,返回自动增长的主键id
- 日志、字段备注查询、自增ID联系设置、常用存储过程
- ibatis获取主键自动增长ID(Oracle/MSSQL/mysql),取得刚插入的ID编号