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