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