我的表中有大约100列,其中50列需要更改为(smallmoney,null)格式。目前它们都是(varchar(3),null)。
如何使用我想要的列进行此操作?有快速的方法吗?让我假装我有5列:
col1 (varchar(3), null)
col2 (varchar(3), null)
col3 (varchar(3), null)
col4 (varchar(3), null)
col5 (varchar(3), null)
如何让它们看起来像这样:
col1 (smallmoney, null)
col2 (smallmoney, null)
col3 (smallmoney, null)
col4 (varchar(3), null)
col5 (varchar(3), null)
答案 0 :(得分:2)
先试一试,但先备份一下表......不知道该数据的自动转换方式如何。
alter table badlyDesignedTable alter column col1 smallmoney, col2 smallmoney, col3 smallmoney
编辑:更改语法
答案 1 :(得分:2)
您可以以编程方式创建ALTER
脚本,然后执行它。我刚刚将其删除,您需要验证语法:
SELECT
'ALTER TABLE "' + TABLE_NAME + '" ALTER COLUMN "' + COLUMN_NAME + '" SMALLMONEY'
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'MyTable'
AND COLUMN_NAME LIKE 'Pattern%'
答案 2 :(得分:1)
您可以查询系统表或ANSI视图以查找相关列,并生成ALTER表语句。此
select SQL = 'alter table'
+ ' ' + TABLE_SCHEMA
+ '.'
+ TABLE_NAME
+ ' ' + 'alter column'
+ ' ' + COLUMN_NAME
+ ' ' + 'smallmoney'
from INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA = 'dbo'
and TABLE_NAME = 'MyView'
order by ORDINAL_POSITION
将为表中的每一列生成一个alter table语句。您需要在where
子句中对其进行过滤,或者将结果过滤到文本编辑器中,然后删除不需要的文本编辑器。
ALTER TABLE ALTER COLUMN
上的{p> Read up虽然...修改alter column
的列会带来约束和限制,特别是如果它已被编入索引。如果无法将任何列转换为目标数据类型,alter table
将失败。对于varchar-> smallmoney转换,如果任何行包含任何看起来不像相应类型的字符串文字的内容,则会失败。如果它不会转换为CONVERT(smallmoney,alter table将失败。它的列包含nil('')或空格(''),转换很可能会成功(在小目标的情况下,我怀疑你结果会得到0.0000。
请记住,多个值可能会转换为目标数据类型中的相同值。这可以软管索引。
如果您尝试从可空列转换为非可空列,则需要首先确保每行都具有非空值。否则转换将失败。
祝你好运。