0

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

4

2 回答 2

3

最终,更改将命名ALTER TABLE语句中的列。不过,只要有一点聪明和耐心,您就可以通过对 sys.syscolumns 进行字符串处理来生成该语句。大致类似

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

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

于 2013-03-14T01:42:34.710 回答
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
于 2013-03-15T14:00:50.103 回答