如题:比如我有一个字段ID,不用用户输入,每增加一条记录,该字段值自动增加1,在SqlServer中有这样的字段类型,为什么在Oracle中我没有找到这样的字段类型阿?我要如何实现这样的功能阿?

解决方案 »

  1.   

    序列
    -- Create sequence 
    create sequence SEQ_GRD_MSG
    minvalue 1
    maxvalue 999999999999999999999999999
    start with 141
    increment by 1
    cache 20;
      

  2.   

    用法:
    insert into table1 (id,name) value (SEQ_GRD_MSG.Nextval,'asdgih')
      

  3.   

    SqlServer的自增字段比较方便;
    Oracle的序列就比较灵活,例如多个表可以公用一个序列;
    因此各有所长
      

  4.   

    以下为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 行)
      

  5.   

    在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-");
    可以用此方法来生成有规则主键,表中标识符等.
    --------------------------------------------------------