在Oracle 9i中,如何设置某个字段的类型为自动增量阿? 如题:比如我有一个字段ID,不用用户输入,每增加一条记录,该字段值自动增加1,在SqlServer中有这样的字段类型,为什么在Oracle中我没有找到这样的字段类型阿?我要如何实现这样的功能阿? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 序列-- Create sequence create sequence SEQ_GRD_MSGminvalue 1maxvalue 999999999999999999999999999start with 141increment by 1cache 20; 用法:insert into table1 (id,name) value (SEQ_GRD_MSG.Nextval,'asdgih') SqlServer的自增字段比较方便;Oracle的序列就比较灵活,例如多个表可以公用一个序列;因此各有所长 以下为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)asdeclare @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 @strScriptexec(@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-");可以用此方法来生成有规则主键,表中标识符等.-------------------------------------------------------- ASP.NET MVC 如何判断选中了哪个li 如何给sliverlight的textbox设置背景图片 如何根据ip地址获取天气 麻烦哪位JS高手帮忙修改一下时间脚本 求一个用工厂模式进行数据访问的实例,我想接触下,设计模式,请高手指点!! 问一个似乎很白痴的数据库显示问题....... 能不能链接两个access文件? VB.net转C#。。C#真难用,下面的东东死活转不过来。。。。 怎么回事?老是出现---“不能使用 '';文件已在使用中。 ” DataGrid的简单问题 网页编码的问题,解决给分100 请问如何可以删除Internet临时文件夹中的内容?
-- Create sequence
create sequence SEQ_GRD_MSG
minvalue 1
maxvalue 999999999999999999999999999
start with 141
increment by 1
cache 20;
insert into table1 (id,name) value (SEQ_GRD_MSG.Nextval,'asdgih')
Oracle的序列就比较灵活,例如多个表可以公用一个序列;
因此各有所长
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 行)
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-");
可以用此方法来生成有规则主键,表中标识符等.
--------------------------------------------------------