如:今天是2008年10月19日.我想自动生成的ID号为:20081019+三位数.后面三位是自动增加的.
哪位大侠.帮个忙.谢谢了.

解决方案 »

  1.   

    1、前台程序生成
    2、缺省
    3、instead of trigger
      

  2.   

    --生成流水号--创建测试表
    create table test(id varchar(18),  --流水号,日期(8位)+时间(4位)+流水号(4位)
    name varchar(10)  --其他字段
    )go
    --创建生成流水号的触发器
    create trigger t_insert on test
    INSTEAD OF insert
    as
    declare @id varchar(18),@id1 int,@head varchar(12)
    select * into #tb from inserted
    set @head=convert(varchar,getdate(),112)+replace(convert(varchar(5),getdate(),108),':','')
    select @id=max(id) from test where id like @head+'%'
    if @id is null
    set @id1=0
    else
    set @id1=cast(substring(@id,13,4) as int)
    update #tb set @id1=@id1+1
    ,id=@head+right('0000'+cast(@id1 as varchar),4)
    insert into test select * from #tb
    go
    --插入数据,进行测试
    insert into test(name)
    select 'aa'
    union all select 'bb'
    union all select 'cc'--修改系统时间,再插入数据测试一次
    insert into test(name)
    select 'aa'
    union all select 'bb'
    union all select 'cc'--显示测试结果
    select * from test
    --删除测试环境
    drop table test/*--测试结果
    id                 name       
    ------------------ ---------- 
    2004022720430001   aa
    2004022720430002   bb
    2004022720430003   cc
    2004022720430004   aa
    2004022720430005   bb
    2004022720430006   cc(所影响的行数为 6 行)
    --*/
      

  3.   

    --以下代码生成的编号长度为12,前6位为日期信息,格式为YYMMDD,后6位为流水号。
    --创建得到当前日期的视图
    CREATE VIEW v_GetDate
    AS
    SELECT dt=CONVERT(CHAR(6),GETDATE(),12)
    GO--得到新编号的函数
    CREATE FUNCTION f_NextBH()
    RETURNS char(12)
    AS
    BEGIN
    DECLARE @dt CHAR(6)
    SELECT @dt=dt FROM v_GetDate
    RETURN(
    SELECT @dt+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) 
    FROM tb WITH(XLOCK,PAGLOCK)
    WHERE BH like @dt+'%')
    END
    GO--在表中应用函数
    CREATE TABLE tb(
    BH char(12) PRIMARY KEY DEFAULT dbo.f_NextBH(),
    col int)--插入资料
    INSERT tb(col) VALUES(1)
    INSERT tb(col) VALUES(2)
    INSERT tb(col) VALUES(3)
    DELETE tb WHERE col=3
    INSERT tb(col) VALUES(4)
    INSERT tb(BH,col) VALUES(dbo.f_NextBH(),14)--显示结果
    SELECT * FROM tb
    /*--结果
    BH           col 
    ------------------- ----------- 
    050405000001  1
    050405000002  2
    050405000003  4
    050405000004  14
    --*/
      

  4.   

    create function f_str()
    returns varchar(16)
    as
    begin
        declare @s varchar(16)
        select @s = max( id ) from ta where left(id,8) = convert(char(8),getdate(),112)
        if @s is null 
            set @s = convert(char(8),getdate(),112)+'001'
        else
    set @s = left(@s,8) + right('000'+ ltrim(cast(right(@s,3) as int) + 1),3)
        return @s
    end
    gocreate table ta(id varchar(16) default dbo.f_str(),col int)
    go
    insert into ta values(default,100)
    insert into ta values(default,100)
    insert into ta values(default,100)
    insert into ta values(default,100)select * from ta 
    drop table tadrop function f_str/*
    id               col
    ---------------- -----------
    20081019001      100
    20081019002      100
    20081019003      100
    20081019004      100
    */