我要编写一个零件规格表,有规格ID和零件ID,规格ID是在零件ID后加三个任意数字,我尝试创建check约束表达式【规格ID】=【零件ID】###,约束创建成功,添加一条记录,零件ID为02,规格为02001,出现“INSECT语句与CHECK约束冲突”的提示,这个是怎么回事?能实现“规格ID是在零件ID后加三个任意数字”这个功能吗?

解决方案 »

  1.   

    我是采用GUI操作,点选规格ID属性,创建CHECK约束,表达式就是([规格ID]='零件ID###')
    刚接SQL,比较菜,请指导~~~
      

  2.   


    create table yourtablename
    (
    id int not null,
    规格id varchar(255),
    零件id varchar(255),
    constraint chk_guige check (len(规格id)=5 and left(规格id,2)=零件id)
    )差不多这个意思
      

  3.   


    create table tb
    (
    pid varchar(10),
    cid varchar(15),
    constraint ch_tb check (left(cid,len(cid)-3) = pid)
    )
    goinsert into tb
    select '01','01002'select *
    from tbinsert into tb
    select '02','01002'drop table tb/**************(1 行受影响)
    pid        cid
    ---------- ---------------
    01         01002(1 行受影响)消息 547,级别 16,状态 0,第 8 行
    INSERT 语句与 CHECK 约束"ch_tb"冲突。该冲突发生于数据库"model",表"dbo.tb"。
    语句已终止。
      

  4.   


    insert into tb
    select '01','01002'select *
    from tbinsert into tb
    select '02','01002'insert into tb
    select '012','012002'select *
    from tbinsert into tb
    select '013','012002'/***********(1 行受影响)
    pid        cid
    ---------- ---------------
    01         01002(1 行受影响)消息 547,级别 16,状态 0,第 8 行
    INSERT 语句与 CHECK 约束"ch_tb"冲突。该冲突发生于数据库"model",表"dbo.tb"。
    语句已终止。(1 行受影响)
    pid        cid
    ---------- ---------------
    01         01002
    012        012002(2 行受影响)消息 547,级别 16,状态 0,第 17 行
    INSERT 语句与 CHECK 约束"ch_tb"冲突。该冲突发生于数据库"model",表"dbo.tb"。
    语句已终止。
      

  5.   


    (len(规格id)=5 and left(规格id,2)=零件id)楼主要注意这里,有必要要自己改动下。
      

  6.   

    我看他们好像都是把零件编号看成2位了,貌似零件编号任意位,而规格id却一直是零件标号+三位
    alter table tb
    add constraint ck_name check(left(规格id,len(规格id-3))=零件id)