更改字段长度的问题

qq37724861 2011-11-13 12:37:21
使用SQL语句更改字段长度,例如之前是 varchar(10) ,改为 varchar(5)
SQL会提示截断二进制数据
请问该如何使用语句强制修改过来呢?(企业管理器可以,我只想用SQL语句)
...全文
138 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
禁用F3 2011-11-13
  • 打赏
  • 举报
回复
alter table tt
alter column col
我是用这个方法
pengxuan 2011-11-13
  • 打赏
  • 举报
回复

if object_id('tb','U') is not null
drop table tb
go
create table tb
(
id int,
name varchar(10)
)
go
insert into tb select 1,'1234567890'
go
update tb set name=left(name,5) --把列数据更新成长度为5的字符串
alter table tb alter column name varchar(5) --更改列长度

要先更新数据的长度,不然更改列长度语句会终止
不过楼主最好还是不要这样做,会丢数据的啊
大力水手 2011-11-13
  • 打赏
  • 举报
回复
这个事危险动作..如果不确定你要的需求还是最好不要这样做...

update tb set a=left(a,5) where len(a)=datalength(a) and len(a)>5
alter table tb alter column a varchar(5)
koumingjie 2011-11-13
  • 打赏
  • 举报
回复
如果不怕数据丢失,为什么不删了重建?
suiyanpeng 2011-11-13
  • 打赏
  • 举报
回复
--例如之前是 varchar(10) ,改为 varchar(5)
alter table tt
alter column col varchar(8)
go

那是因为你改到varchar(5)时存储空间不够造成的,里面有多于5个的字符
  • 打赏
  • 举报
回复
难道不怕数据丢失吗?
--小F-- 2011-11-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qq37724861 的回复:]
谢谢大家的提醒,不怕数据丢失, 如果使用临时表解决的话,是不是会丢失索引等信息呢?
[/Quote]
临时表也是可以利用索引的
我腫了 2011-11-13
  • 打赏
  • 举报
回复

Update t1
Set Col=left(Col,5)
Where len(Col)>5
Alter table t1
Alter Column Col varchar(5)
qq37724861 2011-11-13
  • 打赏
  • 举报
回复
谢谢大家的提醒,不怕数据丢失, 如果使用临时表解决的话,是不是会丢失索引等信息呢?

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧