由于数据库设计不合理,现在想将数据库中所有money型字段改成decimal(10,2),怎样写语句来改?谢谢

blucecat 2004-04-09 10:29:05
最好能先自定义一个数据类型 ,免得以后要改又很麻烦
非常感谢!!!
...全文
995 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2004-04-09
  • 打赏
  • 举报
回复
系统表不是随便改的. 我也不知道为什么会这样.

估计这个在处理是时,不是由系统表控制的.

你可以直接备份数据库,然后用我的代码改嘛.
blucecat 2004-04-09
  • 打赏
  • 举报
回复
我现在将系统定义的money类型的小数部分改成了2位(改的systypes表),可用户表中的money字段根本没变 ,还是4位小数,新建表也不变,重启系统还是没变


为什么会无效呢?
blucecat 2004-04-09
  • 打赏
  • 举报
回复
to zjcxc:怎么会这样?这么说来,不是没人使用自定义数据类型了?简直不可思议,我以前还一直以为自定义数据类型是个好东西呢,原来我错了,不知道其它数据库是不是也不能修改自定义数据类型?sql server 怎么能这样呢?
zjcxc 元老 2004-04-09
  • 打赏
  • 举报
回复
不信你自己测试一下.
pbsql 2004-04-09
  • 打赏
  • 举报
回复
用循环搞定:
declare @tb varchar(100),@colname varchar(100)
while exists(SELECT d.name,a.name,b.name
FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e on a.cdefault=e.id
left join sysproperties g on a.id=g.id and a.colid=g.smallid
where b.name='money')
begin
SELECT @tb=d.name,@colname=a.name
FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e on a.cdefault=e.id
left join sysproperties g on a.id=g.id and a.colid=g.smallid
where b.name='money'
exec('alter table '+@tb+' alter column '+@colname+' numeric(10,2)')
end
blucecat 2004-04-09
  • 打赏
  • 举报
回复
to 邹建:
“一定不要考虑用自定义数据类型,自定义数据类型一旦使用,它就不可以被修改了.”
自定义数据类型的目的不就是为了方便修改吗?不会真的像你说的那样吧?
zjcxc 元老 2004-04-09
  • 打赏
  • 举报
回复
一定不要考虑用自定义数据类型,自定义数据类型一旦使用,它就不可以被修改了.
zjcxc 元老 2004-04-09
  • 打赏
  • 举报
回复
--那倒不用逐表改,可以直接用下面的语句实现

--将所有的表中,数值类型由char,varchar改为nchar,nvarchar

declare tb cursor for
SELECT sql='alter table ['+d.name
+'] alter column ['+a.name+'] numeric(10,2))'
FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
where
b.name='money'
and
not exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (
SELECT name FROM sysindexes WHERE indid in(
SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid
))) --主键不能修改
order by d.name,a.name

declare @sql varchar(1000)
open tb
fetch next from tb into @sql
while @@fetch_status = 0
begin
exec(@sql)
fetch next from tb into @sql
end
close tb
deallocate tb
blucecat 2004-04-09
  • 打赏
  • 举报
回复
我的数据库中有好几百个money字段啊,老大们


我现在将系统定义的money类型的小数部分改成了2位(改的systypes表),可用户表中的money字段根本没变 ,还是4位小数,新建表也不变,重启系统还是没变
leeboyan 2004-04-09
  • 打赏
  • 举报
回复
再设计表中改也行
blucecat 2004-04-09
  • 打赏
  • 举报
回复
天哪!?这样一条一条的写,要写死人啊!
leeboyan 2004-04-09
  • 打赏
  • 举报
回复
1.更改名:exec sp_rename...

A.更改表名
例:将table1改为table2
exec sp_rename 'table1','table2'
B.更改表中的列名
例:将table2中的id列改为idd
exec sp_rename 'table2.id','idd',['column']

2.更改列的属性

例:表table2中的列id为int型,现改为char型
alter table table2 alter column id char

3.增加列

A.例:在表table2中增加name列为char型
alter table table2 add name char(8)
B.例:在表table2中增加nob列为int型且设自增量为1,且不空
alter table table2 add nob int identity(1,1) not null

4.删除列

例:删除table2中的id列
alter table table2 drop column id
lynx286 2004-04-09
  • 打赏
  • 举报
回复
alter table TABLE1 alter column MON numeric(10,2)
zjcxc 元老 2004-04-09
  • 打赏
  • 举报
回复
用自定义的话,以后修改更麻烦
zjcxc 元老 2004-04-09
  • 打赏
  • 举报
回复
alter table 表 字段 numeric(10,2)

34,590

社区成员

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

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