请教SQL2005如何用一段SQL更改多个表多个列的数据类型

lovepay1413 2010-07-10 02:07:04
SQL server 2005 我想将数据库所有表的列 数据类型为 bigint 的改成 varchar(50)
有没有高手可以用一段SQL搞定?
数据表跟列太多了,一个一个改的话死定了。。。
天色已晚,先睡了,等明早答案浮现
谢谢
...全文
256 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovepay1413 2010-07-10
  • 打赏
  • 举报
回复
谢谢1楼的高手。。。。

消息 5074,级别 16,状态 1,第 1 行
对象'PK_t_wm_putaway_line' 依赖于 列'id'。
消息 4922,级别 16,状态 9,第 1 行
由于一个或多个对象访问此列,ALTER TABLE ALTER COLUMN id 失败。

我该换问题了,哈哈,去问问删除所有表的主键先。。。。
SQL77 2010-07-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liangck 的回复:]
SQL code
EXEC sp_MsForeachTable
@command1='DECLARE cur CURSOR FOR
SELECT ''ALTER TABLE ? ALTER COLUMN '' + c.name + '' varchar(50)'' AS flag
FROM sys.col……
[/Quote]
UP

也可以自己写过程来执行游标修改
304的的哥 2010-07-10
  • 打赏
  • 举报
回复
学习一下!
liangCK 2010-07-10
  • 打赏
  • 举报
回复
EXEC sp_MsForeachTable
@command1='DECLARE cur CURSOR FOR
SELECT ''ALTER TABLE ? ALTER COLUMN '' + c.name + '' varchar(50)'' AS flag
FROM sys.columns AS c
WHERE EXISTS(SELECT * FROM sys.types
WHERE c.user_type_id=user_type_id
AND name=N''int'')
AND object_id=OBJECT_ID(''?'');

DECLARE @flag varchar(500);
OPEN cur;
FETCH NEXT FROM cur INTO @flag;
WHILE @@FETCH_STATUS=0
BEGIN
EXEC(@flag);
FETCH NEXT FROM cur INTO @flag;
END
CLOSE cur;
DEALLOCATE cur;',
@whereand=' AND EXISTS(SELECT * FROM sys.columns AS c
WHERE object_id=OBJECT_ID(o.name)
AND EXISTS(SELECT * FROM sys.types
WHERE c.user_type_id=user_type_id AND name=N''int''))'

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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