如何修改所有表的某个字段的字段类型?

AntingZ 2004-09-04 09:41:38
数据库中有N个表有“编号”这个字段,以前都是char(10) ,现在想改成varchar(30)
能不能用一个Sql解决?
...全文
255 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
AntingZ 2004-09-04
  • 打赏
  • 举报
回复
我知道了,在syscolumns表里面可以找到对应关系
AntingZ 2004-09-04
  • 打赏
  • 举报
回复
哦,明白了,谢谢!

再问一下,我查了一下帮助,发现xusertype的信息只有这一行:
xusertype smallint 扩展的用户定义数据类型 ID。
xusertype=175是char,在哪里可以查到其他类型对应的值
zjcxc 元老 2004-09-04
  • 打赏
  • 举报
回复
主键/外键/默认值/唯一键/索引,这些都要删除才能修改

--至于字段类型与长度的问题
--name=''编号'' --这个是限制修改的字段名的
--xusertype=175 --这个是限制只修改字段的类型是 char 的
--prec=10 --这个是限制只修改长度为10的
--三个条件联合起来就是限制修改:字段名=编号,类型=char(10)的,你可以根据自己的需要改

exec sp_msforeachtable
@whereand=' and exists(select * from syscolumns where id=o.id and name=''编号'' and xusertype=175 and prec=10)',
@command1='alter table ? alter column 编号 varchar(20)'
AntingZ 2004-09-04
  • 打赏
  • 举报
回复
可能是这个字段在有些表里面是主键,有些表里面是外键的原因
如果先把主外键关系去掉是不是就可以了

提问的时候为了说的简单一些,没有说具体
这个字段以前的类型是不完全一样的,也就是说有些是varchar(10) ,有些是char(8)
这样是不是也会受到影响

还有2个表的"编号"是int型的(这个可以不考虑,我可以先手工把它改成其它名字)
zjcxc 元老 2004-09-04
  • 打赏
  • 举报
回复
我上面已经说过了,字段上有约束时,是不可以直接修改字段的

主键就是一种约束.
AntingZ 2004-09-04
  • 打赏
  • 举报
回复
就是有点问题:

服务器: 消息 5074,级别 16,状态 8,行 1
对象 'PK_da_scda' 依赖于 列 '编号'。
服务器: 消息 4922,级别 16,状态 1,行 1
ALTER TABLE ALTER COLUMN 版号 失败,因为有一个或多个对象访问此列。

zjcxc 元老 2004-09-04
  • 打赏
  • 举报
回复
--如果不考虑字段不可修改的情况(字段上有约束时,是不可以直接修改字段的)
--可以用下面这一句完成所有表的修改

exec sp_msforeachtable
@whereand=' and exists(select * from syscolumns where id=o.id and name=''编号'' and xusertype=175 and prec=10)',
@command1='alter table ? alter column 编号 varchar(20)'
zjcxc 元老 2004-09-04
  • 打赏
  • 举报
回复
当然不可能用一个sql语句解决.
AntingZ 2004-09-04
  • 打赏
  • 举报
回复
表名没有规律
AntingZ 2004-09-04
  • 打赏
  • 举报
回复
不能删除现有的“编号”字段的数据
friendliu 2004-09-04
  • 打赏
  • 举报
回复
你的表名有规律吗
如果是就可以用存储过程批量修改

34,590

社区成员

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

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