日期:2014-05-18  浏览次数:20578 次

【求助】表中的列删不掉!



报的这样的错

SQL code

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是可以删掉的 那么像这样的列该怎么删除呢???

------解决方案--------------------
先删掉约束,再删除表
------解决方案--------------------
先删掉约束,再修改你的字段
------解决方案--------------------
SQL code

--创建表
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

------解决方案--------------------
SQL code
--对于你的情况来说,这样就可以了。

--删除这个约束
alter table Course drop constraint CK__Course__Periods__0DAFOCB0 --不确定里面是0还是O。

--重新执行删除列成功
ALTER TABLE Course ALTER COLUMN Periods TINYINT

------解决方案--------------------
SQL code

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)

------解决方案--------------------
把约束先干掉
------解决方案--------------------
既然是报错有依赖项 就是被约束了 找出约束删除就木问题叻
------解决方案--------------------
修改也是一样 先去掉约束 再修改
------解决方案--------------------
可以先禁用约束 再修改
------解决方案--------------------
探讨

引用:

修改也是一样 先去掉约束 再修改



然后我就这样写了

alter table Course drop constraint CK__Course__Periods__0DAF0CB0

ALTER TABLE Course ALTER COLUMN Periods TINYINT

ALTER TABLE Co……

------解决方案--------------------
探讨

可以先禁用约束 再修改

------解决方案--------------------
三楼的说的很好,就不必要多说了

------解决方案--------------------
探讨
ALTER TABLE Course ADD constraint CK__Course__Periods__0DAF0CB0
(ALTER TABLE Course ADD constraint CHECK(Periods>0))【或者这样】