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

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

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)

当前回答

如果你不想自己写整个东西,把所有的列都改成相同的数据类型,这可以让它更容易:

select 'alter table tblcommodityOHLC alter column '+name+ 'NUMERIC(18,0);'
from syscolumns where id = object_id('tblcommodityOHLC ')

您可以复制和粘贴输出作为您的查询

其他回答

将ALTER COLUMN语句放在括号内,它应该可以工作。

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

如果你不想自己写整个东西,把所有的列都改成相同的数据类型,这可以让它更容易:

select 'alter table tblcommodityOHLC alter column '+name+ 'NUMERIC(18,0);'
from syscolumns where id = object_id('tblcommodityOHLC ')

您可以复制和粘贴输出作为您的查询

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 tablename add (column1 dataype, column2 datatype);