在小钱币下施放Varchar

时间:2011-05-19 19:03:53

标签: sql-server casting types

我的表中有大约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)

3 个答案:

答案 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。

请记住,多个值可能会转换为目标数据类型中的相同值。这可以软管索引。

如果您尝试从可空列转换为非可空列,则需要首先确保每行都具有非空值。否则转换将失败。

祝你好运。