在SQL SERVER 2000中 如何使这样的ID C_0001  C_0002 C_0003 自增,当插入第四条记录的时候就是C_0004!  先谢谢大家!

解决方案 »

  1.   

    自己用程序或SQL函数去生成这样的自增结果,SQL自己不执行这样的自动增长!!!
      

  2.   

    自增列后加一自定义ID列
    建一触发器 插入后根据自增列值自动在ID列插入自定义值 如C_0003
      

  3.   

    嗯。
      SQL的自增种子都只能是int型的。这样的不支持。
      

  4.   

    sqlserver里面自增长的类型只有一个整型才可以
      

  5.   

    可不可以用一个自动增长列,数据在查询的时候自己组合?用sql或者后台程序都可以
      

  6.   

    写个程序就可以了
    然后调用,调用一次就增长一个,
    用两个字段来实现
    第一个字段char型第二个字段用int
    这样就可以解决了。
      

  7.   

    这个问题我以前问过.经过研究一下明白原理就好做了
    工厂流水号的生成 
    1.用SQL函数生成自动流水号.
     
    流水号格式为:'R'+日期年后二位+二位数月+'-'+二位数日期+自动编号
    R0708-2001
    R0708-2002
    R0708-2003自定义函数如下:
    注:CaiGouInfo为采购单表,CGID为采购单自动流水号CREATE function new_idr(@a datetime) returns varchar(50)
    begin
       ---id为日期格式部分
       declare @id varchar(50),@i int
       select top 1 @id=CGID from CaiGouInfo where left(CGID,8)='R'+(left(convert(varchar(6),@a,12),4)+'-'+right(convert(varchar(6),@a,12),2)) order by CGID desc
       --如果没找到该日期的流水号,则新增加一个流水号,即为当天的第一个流水号
       if @@rowcount=0
          return 'R'+(left(convert(varchar(6),@a,12),4)+'-'+right(convert(varchar(6),@a,12),2))+'01'
       --如果存在该日期的流水号则在该流水的后二位自动编号上加1
       set @i= rtrim(right(@id,2))  +1
       set @id=rtrim(@i)
       --转化流水号后二位为2位字符串
       return 'R'+(left(convert(varchar(6),@a,12),4)+'-'+right(convert(varchar(6),@a,12),2))+right(  '00'+@id ,2 ) 
    end 调用
    在数据表里的流水号字段写个默认值,则应该字段为自动流水号
    default ([dbo].[new_idr](getdate()))2.C#代码生成
           因为除自动编号为的键值是不确定的.不像日期格式是确定的6位.所以SQL 自动生成流水号比较麻烦.采用C#编码生成.
           注:BJID是自动生成的报价单号,CustomerProRes是客户产品资料表
            //报价单为客户代码+物料名称+自动编号,自动编号自动增长
            string BJID =CustomerCode+WLName;
            //查找表中报价单中左边的"客户代码+物料名称"字符串是否是当前的客户数据
            //如果找不到则新增加该客户的第一笔产品报价资料
            DataSet ds_bj = kbs.LQSelectTable("*", "CustomerProRes", "left(BJID,len(BJID)-3)='" + BJID + "'", "", "bjtb");
            if (ds_bj.Tables["bjtb"].Rows.Count == 0)
                BJID += "001";
            else
            {
                //如果存在该产品的报价资料,则新增加一笔报价资料.
                int AutoNo;
                //读取该客户资料的最大编号
                DataSet ds_bj2 = kbs.LQSelectTable("max(BJID) as maxbjid", "CustomerProRes", "left(BJID,len(BJID)-3)='" + BJID + "'", "", "bjtb2");
                //取出该客户资料的最大编号的后两位自动编号,并加1
                AutoNo =Convert.ToInt32(ds_bj2.Tables["bjtb2"].Rows[0][0].ToString().Substring(ds_bj2.Tables["bjtb2"].Rows[0][0].ToString().Length - 3)) + 1;
               //最后两位自动编号转成两位字符串
                if (AutoNo.ToString().Length == 1) BJID +="00"+AutoNo;
                else
                {
                    if (AutoNo.ToString().Length == 2) BJID += "0"+AutoNo;
                    else BJID += AutoNo;
                }
            }最后直接用insert到相对应的流水号字段即可
      

  8.   

    输出时拼串"C_000"+id不就行了,
    何必强求呢?
      

  9.   

    输出时拼串"C_000"+id不就行了,
    何必强求呢?
    --------------
    支持这个
      

  10.   

    用SQL函数生成自动流水号可行
      

  11.   

    建一个SQL SERVER端自定义函数
    create function test()
    ......
    函数的作用是是出取现有ID除去前一部分,编号最大的加上一,再组合成你要的那种格式返回就可以了在你插入值时
    insert test into (id,.....) values (test(),....)
    就OK了
      

  12.   

    如果你不觉得麻烦,可以尝试用触发器,简单的写了个程序:
    create table A
    (
      column_1 VARCHAR2(12),
      column_2 VARCHAR2(12)
    )
    tablespace USERS
      pctfree 10
      initrans 1
      maxtrans 255
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      );---------- 1 序列 ----------
    create sequence seq_ids
    minvalue 1
    maxvalue 9999
    start with 1
    increment by 1
    nocache
    order;
    ---------------------------------------- 2 触发器 ----------
    CREATE OR REPLACE TRIGGER A_trigger
      BEFORE INSERT ON A
      FOR EACH ROW
    DECLARE
      nextid varchar2(8);
    BEGIN
      IF :NEW.column_1 IS NULL THEN
        :NEW.column_1 := 'C_0001';
      ELSE
        SELECT seq_ids.nextval INTO nextid FROM sys.dual;
      END IF;
        :NEW.column_2 := nextid;
        :NEW.column_1 :=  'C_' || lpad(nextid, 4, '0');
        
    END A_trigger;
    ------------------------------测试:
    insert into A values('', '')第一次执行
    C_0001 1
    第二次执行
    C_0001 1
    C_0002 2
    .......
    以上是用Oracle做的,SQL Server不太会用,莫怪。
      

  13.   

    支持liqiang665() ( )~~
      

  14.   

    用笨办法就是,你的ID设为自增长
    插完数据的时候:
    select right('C_000'+convert(varchar(20),ID),6)
      

  15.   

    恩, 偶还没用过触发器, oracle也是用简单的操作而已, 这次很受用! 
    多谢!
      

  16.   

    我们也有这样的功能,我们是在页面上算好了,然后在放进sql语句里面一起update进去的
      

  17.   

    自己用程序或SQL函数去生成这样的自增结果