A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵学辉 中级黑马   /  2012-7-6 11:38  /  8389 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

用“alter table table_1 drop 字段名”删除一列是出错了
消息 3728,级别 16,状态 1,第 1 行
'shicheng' 不是约束。
消息 3727,级别 16,状态 0,第 1 行
未能删除约束。请参阅前面的错误信息。

是怎么回事啊???

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

11 个回复

正序浏览
一般来说在对数据库表的删除或者是列的删除都要检查一下它们的依赖关系,把这一搞清楚了,再来对其删除都是用drop进行删除
针对楼主的问题alter table table_1 drop 字段名这在sql2005中必须要加column指明是列

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
我测试了下,的确和约束没有关系,主要是少了COLUMN的原因,你加上就好了

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
可以把外键约束暂时停止了,再删除数据,删除后再恢复外键约束
具体语句是
alter table 表的名字
nochek constraint 外键约束名字
truncate table 表的名字
alter table 表的名字
check constraint 外键约束名字


评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
楼上几位讲到少了column
其实和column没有关系,sql server2008 在修改表的情况下再修改列,不写默认就是针对column进行修改,因此和少不少没有关系,大家可以试试...

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
再语法对的情况下,以下几个问题会造成此错误:约束,或是外键的问题,别的表依赖此列可能会造成此问题

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
我用sql2008试了几下,发现只是少了COLUMN,与约束好像没有关系.

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
你删除的时候会提示你,有默认约束依赖该字段,那么你需要先删除默认约束(错误提示里会有默认约束名),再删除字段:
ALTER TABLE  表名 DROP CONSTRAINT  默认约束名
GO
ALTER TABLE  表名 DROP COLUMN 字段名
GO

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
我觉得应该先删除该列的数据,再删除该列的约束,然后才能用楼上的语法删除该列。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
SQL删除一列语法:
ALTER TABLE table_name
DROP COLUMN column_name
你写的少了 COLUMN,加上就行了

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
1,在删除数据库表字段之前,先确认该表有没有数据;
2,若该表有数据,delete from tablename;
3,删除之后,用“alter table table_1 drop 字段名”删除一列;

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
约束没有删除,是不是设置了主外键关系约束或是其他约束没有被删除

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马