none
请教关于CONSTRAINT完整性约束子句的问题。 RRS feed

  • 问题

  • 在Student表中,用 Add CONSTRAINT写出完整性约束子句

      将ssex限制为只能取‘男’或者‘女’ ,年龄小于30

    注:Student(sno,sname,ssex,sage) 

    我的语句:

    ALTER TABLE Student 
    ADD CONSTRAINT Stm
    CHECK(Ssex in ('男','女')),
    CHECK(Sage>30)


    报错: ALTER TABLE 语句与 CHECK 约束"Stm"冲突。该冲突发生于数据库"Grade",表"dbo.Student", column 'Ssex'。

    2010年6月11日 12:35

答案

  • -- 针对每个字段单独设置约束
    alter table tablename
    with nocheck -- 不验证表中的现有数据, 不加这个, 默认是要验证的
    add 
    	constrant check1 check (sex='男' or sex='女'),
    	constrant check2 check (Sage>30) 
    ;
    
    
    -- 直接在表级别上设置约束
    alter table tablename
    with nocheck -- 不验证表中的现有数据, 不加这个, 默认是要验证的
    add 
    	constrant check1 check ( (sex='男' or sex='女') and Sage>30)
    ;
    
    
    2010年6月12日 4:44

全部回复

  • 作业?

    alter tablename

    add constrant check1 check (sex='男' or sex='女')

    这几个都很简单的问题,建议你自己对这帮助自己写吧?写不出来在把问题发上来?

     


    family as water
    2010年6月11日 12:45
  • 作业?

    alter tablename

    add constrant check1 check (sex='男' or sex='女')

    这几个都很简单的问题,建议你自己对这帮助自己写吧?写不出来在把问题发上来?

     


    family as water

    我会写的,也是这样写的,但报错所以想确认一下到底怎么写,查了联机丛书太简略了。

      老是报这样的错误:

       ALTER TABLE 语句与 CHECK 约束"Stm"冲突。该冲突发生于数据库"Grade",表"dbo.Student", column 'Ssex'。

    注 Stm是约束名。语句分析没问题,就是执行错误。

    2010年6月11日 12:57
  • 在Student表中,用 Add CONSTRAINT写出完整性约束子句

      将ssex限制为只能取‘男’或者‘女’ ,年龄小于30

    注:Student(sno,sname,ssex,sage) 

    我的语句:

    ALTER TABLE Student 
    ADD CONSTRAINT Stm
    CHECK(Ssex in ('男','女')),
    CHECK(Sage>30)


    报错: ALTER TABLE 语句与 CHECK 约束"Stm"冲突。该冲突发生于数据库"Grade",表"dbo.Student", column 'Ssex'。


    可能是你的Student表的Ssex列里已经有了除了 '男'和'女'以外的值 ..

    所以要定义这个CHECK约束

    先 DELETE Student where Ssex not in ('男','女')

     

    2010年6月11日 14:26
  • 在Student表中,用 Add CONSTRAINT写出完整性约束子句

      将ssex限制为只能取‘男’或者‘女’ ,年龄小于30

    注:Student(sno,sname,ssex,sage) 

    我的语句:

    ALTER TABLE Student 
    ADD CONSTRAINT Stm
    CHECK(Ssex in ('男','女')),
    CHECK(Sage>30)


    报错: ALTER TABLE 语句与 CHECK 约束"Stm"冲突。该冲突发生于数据库"Grade",表"dbo.Student", column 'Ssex'。


    可能是你的Student表的Ssex列里已经有了除了 '男'和'女'以外的值 ..

    所以要定义这个CHECK约束

    先 DELETE Student where Ssex not in ('男','女')

     


    还有一个办法在建立约束的时候,不检查。
    family as water
    2010年6月12日 2:05
  • -- 针对每个字段单独设置约束
    alter table tablename
    with nocheck -- 不验证表中的现有数据, 不加这个, 默认是要验证的
    add 
    	constrant check1 check (sex='男' or sex='女'),
    	constrant check2 check (Sage>30) 
    ;
    
    
    -- 直接在表级别上设置约束
    alter table tablename
    with nocheck -- 不验证表中的现有数据, 不加这个, 默认是要验证的
    add 
    	constrant check1 check ( (sex='男' or sex='女') and Sage>30)
    ;
    
    
    2010年6月12日 4:44