将200列从varchar更改为float

时间:2013-03-14 00:36:31

标签: sql sql-server sql-server-2005

我可以编写一个简单的脚本(不命名所有列),将varchar(50)中的200多列更改为float吗?从技术上讲,数据是浮点数,但是在varchar中意外创建。我不关心我会失去的精确度。

2 个答案:

答案 0 :(得分:3)

最终,更改会在ALTER TABLE语句中命名列。但是,通过一点点聪明和耐心,您可以通过字符串slinging sys.syscolumns生成该语句。大致类似

select 'alter table tablename '
select 'alter column [' + name + '] float not NULL' 
from sys.syscolumns where id = objectid(tablename) order by name

这将产生SQL来做你想要的。仔细检查,然后执行。

答案 1 :(得分:0)

以上是James K. Lowden编写的查询更新,它只提供了类型为varchar(50)的列。希望这会使事情变得更容易,但您仍需要非常仔细地检查所有查询。

select 'ALTER TABLE ' + s.name + '.' + T.name + '      ALTER COLUMN [' + C.name + '] float not null'  
from sys.columns C
inner join sys.tables T on C.object_id = T.object_id
inner join sys.schemas S on T.schema_id = S.schema_id
where 
C.system_type_id = 167 -- this is type for varchar
and C.max_length = 50 -- selects only varchars(50) and avoids others