日期:2014-05-17  浏览次数:20426 次

对SQLServer数据库的几百张表操作,更改所有表的某些列的数据类型
希望能把N张表的列的数据类型是int改成decimal(19, 0),Bigint改成 decimal(19, 0),Smallint改成decimal(5, 0),Bit改成 decimal(1, 0)
  说一下我为什么要改sqlserver那几百张表的原因吧;
  本人做.NET开发的,最近做个项目是一个只能访问SQLServer数据库,要求改成能访问Oracle数据库,用了数据库移植工具把SQLServer的数据库移植到Oracle里了,数据和表都移植过去了,但sqlserver的有些数据类型oralce没有,自动转成number(*,*)的;
  然后代码里的实体类是创建的一个datatable,所以oralce里返回的数据是一个以oralce数据类型对应的一个datatable,就是所有number(*,*)型在返回出来的都是decimal型的;实体类定义的datatable类型对应sqlserver,他们无法赋值(不想一列列的循环赋值,影响效率,也想过直接改oralce返回的datatable的数据类型,发现有数据改不了,然后改过实体类,定义了一个带参数的构造函数,去定义对应oralce的一个datatable,经理说不行,客户端有地方频繁new实体类,我怎么知道要不要带参数,要我以oracle为标准定义一个实体类.....)
  就这样,问题转到sqlserver上,实体类定义的datatable的列的类型对应oralce的number是decimal,又回到原来的问题上,两个列的数据类型不一样的datatable无法赋值,所以当从sqlserver读取数据时,返回的也要对应decimal类型,只好把sqlserver中那些表里的列的数据类型改了,好几百张表,希望大神们能用sql把列的数据类型改了.
大神们求助

------解决方案--------------------
select 'alter table '+b.name+' alter '+a.name + 'decimal(19,0)' 
from syscolumns a
inner join sysobjects b on a.id=b.id
where a.xtype=56

用这个语句生成脚本,然后执行脚本。这是int转换成decimal类型
其他类似的自己动下脑