--创建表 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
--对于你的情况来说,这样就可以了。--删除这个约束 alter table Course drop constraint CK__Course__Periods__0DAFOCB0 --不确定里面是0还是O。--重新执行删除列成功 ALTER TABLE Course ALTER COLUMN Periods TINYINT
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__0DAF0CB0ALTER TABLE Course ALTER COLUMN Periods TINYINT ALTER TABLE Course ADD constraint CK__Course__Periods__0DAF0CB0 (ALTER TABLE Course ADD constraint CHECK(Periods>0))【或者这样】可是还是不成功【再次添加约束的时候】 报语法错禁用网上搜了下 不搞懂怎么回事来着 再看看怎么就没一个简单的方法呢
--创建表
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
alter table Course drop constraint CK__Course__Periods__0DAFOCB0 --不确定里面是0还是O。--重新执行删除列成功
ALTER TABLE Course ALTER COLUMN Periods TINYINT
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__0DAF0CB0ALTER TABLE Course ALTER COLUMN Periods TINYINT ALTER TABLE Course ADD constraint CK__Course__Periods__0DAF0CB0
(ALTER TABLE Course ADD constraint CHECK(Periods>0))【或者这样】可是还是不成功【再次添加约束的时候】 报语法错禁用网上搜了下 不搞懂怎么回事来着 再看看怎么就没一个简单的方法呢
没人让你怎么add constraint
不过楼主这种约束,约束名是系统生成的,删除都比较麻烦吧.
可以选择在企业管理器里面改,不用删除约束也不用禁用约束
你的上面的删除,修改应该是没有问题的了,重新创建的时候不对。ALTER TABLE Course ADD CONSTRAINT CK__Course__Periods__0DAF0CB0
CHECK (Periods>0)
现膜拜个 可以了这种东西没写过还真的不知道诶只是语句上感觉怪怪的 CK__Course__Periods__0DAF0CB0 和 CHECK (Periods>0)明明是同一个约束嘛干嘛直接用 CHECK (Periods>0)就不行呢 呃呃 不好删除的时候 也直接用 CHECK (Periods>0)就行了 多好
PS:
fanzhouqi:就是这么写的啊 书上 大家sjcss:嗯嗯 不过还是很想知道用T-SQL语句怎么禁用啊解禁之类的啊
我知道了 CK__Course__Periods__0DAF0CB0是约束名 CHECK(Periods>0)) 是约束的定义看来今天不能再看这方面的东东了 彻底短路