各位大侠,小弟遇到一个问题.譬如创建这样一个表:
CREATE TABLE tb_test
(
test_id char(5),
test_name char(50) primary key,
test_desc varchar(128)
)我看到有些表INSERT一行时,有些值并没有输入,但是插入后是自动增加.比如test_id,并没有在
INSERT INTO tb_test VALUES ('a','b')结果是:00001,a,b请问这个是怎么实现的?如果test_id char(5) DEFAULT xxx
那么这个xxx怎么弄的呢?谢谢...inserttablecreate

解决方案 »

  1.   

    char类型是不可以自增的
    如果真要这种效果,你可以写个函数,获取流水帐号,
    比如说流水帐号 函数为dbo.a()
    那么创建表的时候就可以
    CREATE TABLE tb_test
    (
    test_id char(5) default dbo.a(),
    test_name char(50) primary key,
    test_desc varchar(128)
    )
    这样再插入就可以了
    INSERT INTO tb_test VALUES ('a','b')
      

  2.   

    建表的时候有一个默认值,比如我建一列create table(a varchar(10) default '00001',b int)
    a列默认的数值就是00001,你也可以更改。有时候有的默认值是自动生成的那种,你就不能更改
      

  3.   

    create table x(
    y int not null default 0,
    ...)或者显式加default 约束。
      

  4.   

    这个函数是存储过程?
    我没弄过SQL.所以,不是很明白这个函数写在哪里.请再给点提示,谢谢
      

  5.   

    自增列一般是整形的吧CREATE TABLE tb_test
    (
    test_id int,
    test_name char(50) primary key,
    test_desc varchar(128)
    )默认值,一般是常量值或者标量函数,比如getdate(),这种字符形式的0001应该是不行的
    CREATE TABLE tb_test
    (
    test_id char(5) default '00001',
    test_name char(50) primary key,
    test_desc varchar(128)
    )
      

  6.   

    我是需要test_id每次插入都会自动+1
    自增列不支持char,我已经尝试过,现在应该就是default之后的函数问题,不知道在什么地方添加这个函数
      

  7.   

    a int indentity(1,1) 前面的1是开始数字,后面的1是每次递增多少,你可以改 
      

  8.   


    自增列加计算列create table x(
    id int identity(1,1),
    v char(5) as right('00000' + rtrim(id),5),
    ....
    )
    v就是你要的列。
      

  9.   

    CREATE FUNCTION dbo.GetIdentityNum()
      RETURNS char(5)
      AS
      BEGIN
          RETURN     (SELECT RIGHT(00001+ISNULL(RIGHT(MAX(id),5),0),5) FROM tb)
      END
    select dbo.GetIdentityNum()
    drop function GetIdentityNum()
     
    drop table tb
    create table tb
    (
    id char(5) default dbo.GetIdentityNum(),
    name nvarchar(10)
    )insert into tb(name) values('a')
    insert into tb(name) values('b')
    select * from tb
      

  10.   

    [quote=引用
    自增列加计算列create table x(
    id int identity(1,1),
    v char(5) as right('00000' + rt……CREATE TABLE tb_test
    (
    id int identity(1,1),
    test_id char(5) AS RIGHT('00000'+rtrim(id),5),
    test_name char(50) primary key,
    test_desc varchar(128)
    )提示错误:消息 156,级别 15,状态 1,第 4 行
    关键字 'AS' 附近有语法错误。
      

  11.   


    船长,你好.我用你的方法,如果这样写:
    CREATE FUNCTION dbo.GetIdentityNum()
      RETURNS char(5)
      AS
      BEGIN
          RETURN
     
         (SELECT RIGHT(00001+ISNULL(RIGHT(MAX(id),5),0),5) FROM tb)
      ENDcreate table tb
    (
        id    char(5) default dbo.GetIdentityNum(),
        name    nvarchar(10)
    )会报语法错误.分开写,先运行function,再创建表就能成功
    函数和创建表不能同时执行么
      

  12.   

    CREATE FUNCTION dbo.GetIdentityNum()
      RETURNS char(5)
      AS
      BEGIN
          RETURN
     
         (SELECT RIGHT(00001+ISNULL(RIGHT(MAX(id),5),0),5) FROM tb)
      END
    go
    create table tb
    (
        id    char(5) default dbo.GetIdentityNum(),
        name    nvarchar(10)
    )
    go这样就OK了
      

  13.   

    GO的意思 是 分批处理语句 有加这个 GO ,就执行GO 行的代码,执行后再执行接下来的代码……
      

  14.   

    随手敲的,多敲了一点。
    drop table tb_test
    go
    CREATE TABLE tb_test
    (
    id int identity(1,1),
    test_id AS RIGHT('00000'+rtrim(id),5),
    test_name char(50) primary key,
    test_desc varchar(128)
    )
    goinsert tb_test select 'a','d'
    select * from tb_test
    go
    /*
    1 00001 a                                                  d
    */
      

  15.   

    CREATE FUNCTION dbo.GetIdentityNum()   
    RETURNS char(5)   
    AS  BEGIN      
    RETURN        
    (SELECT RIGHT('0000'+ltrim(convert(nvarchar,count(1)+1)),5) from tb  )
    END
    go 
    create table tb 
    (
        test_id    char(5) default dbo.GetIdentityNum(),     
        test_name    nvarchar(10) ) 
    go   
    insert into tb(test_name)
    select 'test1'
    go