高分悬赏! sql server 2000 字段长度如何减少 急急急!!!!

varchar字段如何改小,如varchar(50)改成varchar(40)??直接修改alter都没用,,,已经有数据,不能删除,... varchar字段如何改小,如varchar(50) 改成varchar(40)?? 直接修改 alter 都没用 ,,, 已经有数据,不能删除, 展开
 我来答
frogley
2013-07-16 · TA获得超过1854个赞
知道小有建树答主
回答量:1008
采纳率:50%
帮助的人:1082万
展开全部

如果该字段已有数据没有超过40字节的,那么可以用alter

alter table 表名 alter column 列名 varchar(40)

如果已有数据中有超过40字节的,那么上面语句会报错:

SQL Server Database Error: 将截断字符串或二进制数据。语句已终止。

此时可以考虑增加一个varchar(40)的字段,将原字段的前40个字符拷过来,再删除原字段。

alter table 表名 add 列名2 varchar(40)
update 表名 set 列名2=left(列名,40)
alter table 表名 drop column 列名
追问
直接用alter  报错
服务器: 消息 5074,级别 16,状态 8,行 1
索引 'i_bd_item_info_5' 依赖于 列 'item_name'。
服务器: 消息 4922,级别 16,状态 1,行 1
ALTER TABLE ALTER COLUMN item_name 失败,因为有一个或多个对象访问此列。
追答
哦,还建了索引啊。你先取消索引,等长度改完以后再重建索引吧。
上官箫竹
2013-07-16 · 超过10用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:15.9万
展开全部
把数据导出为sql,清空表过后,修改字段,再执行一次导入数据sql
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leiyangbdwk
2013-07-16 · TA获得超过3295个赞
知道大有可为答主
回答量:4975
采纳率:12%
帮助的人:4393万
展开全部
你在设计器里面修改了然后保存有无报错?那个字段最长的一串字符复制来看看。
---------------补充-------------
报的错误应该是由于这一列充当了其他某些表的外键引起的,先把外键去掉应该就可以了。
追问
“t_bd_item_info”表
- 警告: 自“varchar(50)”转换列“item_name”时可能丢失数据。
- 警告: 无法读取触发器“tr_bd_i_item_info”。
追答
我晕了,还有触发器?看来你这数据库是很复杂的,不知道你把50的长度改成40有什么作用,还是尽量别动好了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
厍曼冬6o
2013-07-16 · TA获得超过1569个赞
知道小有建树答主
回答量:1336
采纳率:0%
帮助的人:1205万
展开全部
1.先增加一列你需要长度的字段,
2.把数据由原字段更新过来,
3.删除原字段.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
szm341
2013-07-16 · TA获得超过6726个赞
知道大有可为答主
回答量:5005
采纳率:100%
帮助的人:5167万
展开全部
用alter语法报什么错误?
追问
直接用alter 
服务器: 消息 5074,级别 16,状态 8,行 1
索引 'i_bd_item_info_5' 依赖于 列 'item_name'。
服务器: 消息 4922,级别 16,状态 1,行 1
ALTER TABLE ALTER COLUMN item_name 失败,因为有一个或多个对象访问此列。
追答
哦,如果列上有索引或者约束的话是会阻止更改列的操作
先要删除列的索引或者约束
DROP INDEX [i_bd_item_info_5] ON tbname
然后再修改列,若再出现约束依赖于xxx
就删除约束
alter table tbname drop 约束名xxx
然后在修改
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式