报的这样的错
CREATE TABLE Course
(
Cno CHAR(10) PRIMARY KEY,
Cname VARCHAR(20) NOT NULL,
Periods SMALLINT CHECK(Periods>0),
Property CHAR(4) CHECK(Property in('必修','选修'))
)表是这样的我想是那个CHECK的约束导致我删不掉的  Cname是可以删掉的  那么像这样的列该怎么删除呢???

解决方案 »

  1.   


    --创建表
    CREATE TABLE Course1
    (
    Cno CHAR(10) PRIMARY KEY,
    Cname VARCHAR(20) NOT NULL,
    Periods SMALLINT CHECK(Periods>0),
    Property CHAR(4) CHECK(Property in('必修','选修'))
    )
    --执行删除列失败
    ALTER TABLE Course1 ALTER COLUMN Periods TINYINT/*
    Msg 5074, Level 16, State 1, Line 1
    The object 'CK__Course1__Periods__64ECEE3F' is dependent on column 'Periods'.
    Msg 4922, Level 16, State 9, Line 1
    ALTER TABLE ALTER COLUMN Periods failed because one or more objects access this column.
    */--删除这个约束
    alter table Course1 drop constraint CK__Course1__Periods__64ECEE3F
    --重新执行删除列成功
    ALTER TABLE Course1 ALTER COLUMN Periods TINYINT
      

  2.   

    --对于你的情况来说,这样就可以了。--删除这个约束
    alter table Course drop constraint CK__Course__Periods__0DAFOCB0 --不确定里面是0还是O。--重新执行删除列成功
    ALTER TABLE Course ALTER COLUMN Periods TINYINT
      

  3.   


    if object_id('tb') is not null
       drop table tb
    go
    create table tb
    (
     id int,
     name varchar(10),
     age int check(age>10)
    )
    go
    --修改出错
    alter table tb alter column age varchar(10)
    /*
    消息 5074,级别 16,状态 1,第 1 行
    对象'CK__tb__age__08012052' 依赖于 列'age'。
    消息 4922,级别 16,状态 9,第 1 行
    由于一个或多个对象访问此列,ALTER TABLE ALTER COLUMN age 失败。
    */
    --先删除约束CK__tb__age__08012052
    alter table tb drop constraint CK__tb__age__08012052
    go
    --再执行修改字段
    alter table tb alter column age varchar(10)
      

  4.   



    然后我就这样写了alter table Course drop constraint CK__Course__Periods__0DAF0CB0ALTER TABLE Course ALTER COLUMN Periods TINYINT  ALTER TABLE Course ADD constraint CK__Course__Periods__0DAF0CB0
    (ALTER TABLE Course ADD constraint CHECK(Periods>0))【或者这样】可是还是不成功【再次添加约束的时候】  报语法错禁用网上搜了下  不搞懂怎么回事来着  再看看怎么就没一个简单的方法呢  
      

  5.   


    没人让你怎么add constraint 
      

  6.   

    如果用sql改列类型的话,禁用约束是没用的,必须删除约束才可以.
    不过楼主这种约束,约束名是系统生成的,删除都比较麻烦吧.
    可以选择在企业管理器里面改,不用删除约束也不用禁用约束
      

  7.   

    你这两种都不对...
    你的上面的删除,修改应该是没有问题的了,重新创建的时候不对。ALTER TABLE Course ADD CONSTRAINT CK__Course__Periods__0DAF0CB0
        CHECK (Periods>0)
      

  8.   


    现膜拜个   可以了这种东西没写过还真的不知道诶只是语句上感觉怪怪的   CK__Course__Periods__0DAF0CB0 和   CHECK (Periods>0)明明是同一个约束嘛干嘛直接用   CHECK (Periods>0)就不行呢  呃呃  不好删除的时候  也直接用 CHECK (Periods>0)就行了  多好
    PS:
    fanzhouqi:就是这么写的啊  书上 大家sjcss:嗯嗯  不过还是很想知道用T-SQL语句怎么禁用啊解禁之类的啊
      

  9.   


    我知道了  CK__Course__Periods__0DAF0CB0是约束名 CHECK(Periods>0)) 是约束的定义看来今天不能再看这方面的东东了  彻底短路