字段code为主键
字段code的生成方式为系统自动生成,生成规则为 出版社编码(3位)+序号(4)出版社编码是 表中的字段

解决方案 »

  1.   


    参考这个:Id, FormatId, F1 ,F2
    Id序号我设了自动加一,FormatId我想他也象这样"SL000001",
    当Insert时就加1,FormatId我想他也能自动加一"SL000001","SL000002"...
    能用一条sql什么办法实现.最好不要用中间表。有什么好方法?
    谢谢!
    create table #test
    (id int identity,
    FormatId as 'SL'+right(10000000+id,6),
    F1 varchar(50))
    go
    insert #test(F1) select '1'
    union all select '2'
    select * from #testdrop table #test
    /*
    id          FormatId       F1   
    ----------- -------------- -----
    1           SL000001       1
    2           SL000002       2(所影响的行数为 2 行)
    */
      

  2.   

    /* 为了防止任何可能出现的数据丢失问题,您应该先仔细检查此脚本,然后再在数据库设计器的上下文之外运行此脚本。*/
    BEGIN TRANSACTION
    SET QUOTED_IDENTIFIER ON
    SET ARITHABORT ON
    SET NUMERIC_ROUNDABORT OFF
    SET CONCAT_NULL_YIELDS_NULL ON
    SET ANSI_NULLS ON
    SET ANSI_PADDING ON
    SET ANSI_WARNINGS ON
    COMMIT
    BEGIN TRANSACTION
    GO
    CREATE TABLE dbo.Table_1
    (
    code  AS cbs+xh,
    cbs char(3) NOT NULL,
    xh char(4) NOT NULL
    )  ON [PRIMARY]
    GO
    ALTER TABLE dbo.Table_1 ADD CONSTRAINT
    PK_Table_1 PRIMARY KEY CLUSTERED 
    (
    code
    ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]GO
    COMMIT
      

  3.   

    不好意思我可能没说清楚~~一个图书信息表  code是主键 char 型出版社编号  char型    :   不是唯一值序号   不是表中的字段  我想  没想表中插入一条数据时   code 按照  相应的  出版社编码(3位) + 序号(4)    序号  自增比如  图书  sql server 基础  出版社编号  为  DIG      序号为 0001
    则  code为   DIG0001再插入的  话  为  DIG0002
    若  换不同出版社   那  序号  从0001  开始   例如  QHP0001
      

  4.   

    不好意思我可能没说清楚~~ 一个图书信息表  code是主键 char 型 出版社编号  char型    :  不是唯一值 序号  不是表中的字段  我想  没想表中插入一条数据时  code 按照  相应的  出版社编码(3位) + 序号(4)    序号  自增 比如  图书  sql server 基础  出版社编号  为  DIG      序号为 0001 
    则  code为  DIG0001 再插入的  话  为  DIG0002 
    若  换不同出版社  那  序号  从0001  开始  例如  QHP0001
      

  5.   

    参考一下这个,不知道是谁写的了,不好意思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
    --*/
      

  6.   

    --code为  DIG0001
    declare @str char(7)
    select @str=max(code) from tb where 出版社编号='DIG'
    --这个就是新的编号
    set @str=left(@str,3)+right('0000'+cast(right(@str,4)+1 as char),4)