我需要更改表中几个列的数据类型。

对于单个列,下面的工作很好:

ALTER TABLE tblcommodityOHLC
ALTER COLUMN
    CC_CommodityContractID NUMERIC(18,0) 

但是如何在一条语句中修改多个列呢?以下选项无效:

ALTER TABLE tblcommodityOHLC
ALTER COLUMN
    CC_CommodityContractID NUMERIC(18,0), 
    CM_CommodityID NUMERIC(18,0)

当前回答

下面的解决方案不是一个单独的语句来修改多个列,但是,是的,它使生活变得简单:

生成一个表的CREATE脚本。 第一行用ALTER TABLE [TableName] ALTER COLUMN替换CREATE TABLE 从列表中删除不需要的列。 根据需要更改列数据类型。 执行Find and Replace…,如下所示: 发现:空, 替换为:NULL;修改表的列 点击替换按钮。 运行脚本。

希望能节省很多时间:)

其他回答

在一条ALTER TABLE语句中执行多个ALTER COLUMN操作是不可能的。

在这里查看ALTER TABLE语法

您可以执行多个ADD或多个DROP COLUMN,但只能执行一个ALTER 列。

select 'ALTER TABLE ' + OBJECT_NAME(o.object_id) + 
    ' ALTER COLUMN ' + c.name + ' DATETIME2 ' + 
    CASE WHEN c.is_nullable = 0 THEN 'NOT NULL' ELSE 'NULL' END
from sys.objects o
inner join sys.columns c on o.object_id = c.object_id
inner join sys.types t on c.system_type_id = t.system_type_id
where o.type='U'
and c.name = 'Timestamp'
and t.name = 'datetime'
order by OBJECT_NAME(o.object_id)

由devio提供

我们可以像这样在一个查询中修改多个列:

ALTER TABLE `tblcommodityOHLC`
    CHANGE COLUMN `updated_on` `updated_on` DATETIME NULL DEFAULT NULL AFTER `updated_by`,
    CHANGE COLUMN `delivery_datetime` `delivery_datetime` DATETIME NULL DEFAULT CURRENT_TIMESTAMP AFTER `delivery_status`;

只需以逗号分隔查询。

正如其他人回答的那样,您需要多个ALTER TABLE语句。 试一试:

ALTER TABLE tblcommodityOHLC alter column CC_CommodityContractID NUMERIC(18,0);
ALTER TABLE tblcommodityOHLC alter column CM_CommodityID NUMERIC(18,0);

如果我正确理解了你的问题,你可以使用下面提到的查询在一个表中添加多个列。

查询:

Alter table tablename add (column1 dataype, column2 datatype);