如何在SQL Server中一次更改多个列

D.m*_*esh 127 t-sql sql-server alter-column

我需要ALTER表中几列的数据类型.

对于单个列,以下工作正常:

ALTER TABLE tblcommodityOHLC
ALTER COLUMN
    CC_CommodityContractID NUMERIC(18,0) 
Run Code Online (Sandbox Code Playgroud)

但是如何在一个语句中更改多个列?以下不起作用:

ALTER TABLE tblcommodityOHLC
ALTER COLUMN
    CC_CommodityContractID NUMERIC(18,0), 
    CM_CommodityID NUMERIC(18,0)
Run Code Online (Sandbox Code Playgroud)

Nei*_*ght 123

这是不可能的.您需要逐个完成此操作.

您可以使用修改后的列创建临时表,复制数据,删除原始表并将临时表重命名为原始名称.

  • +1,`你需要逐个完成这个.所以,最重要的是,只需使用多个`ALTER TABLE ALTER COLUMN`命令? (5认同)
  • @KM一个问题是如果你正在改变一张大桌子.每个语句都意味着一个新的扫描,但是如果你可以改变多个列,那么所有的改变都可以更快 (5认同)

Fer*_*res 20

在单个ALTER TABLE语句中执行多个ALTER COLUMN操作是不可能的.

请参阅此处的ALTER TABLE语法:http:
//msdn.microsoft.com/en-US/library/ms190273.aspx

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


小智 10

以下解决方案不是用于更改多列的单个语句,但是,它使生活变得简单:

  1. 生成表的CREATE脚本.

  2. 更换CREATE TABLEALTER TABLE [TableName] ALTER COLUMN的第一线

  3. 从列表中删除不需要的列.

  4. 根据需要更改列数据类型.

  5. 执行查找和替换...如下:

    1. 查找:NULL,
    2. 用...来代替: NULL; ALTER TABLE [TableName] ALTER COLUMN
    3. 点击替换按钮.
  6. 运行脚本.

希望它能节省很多时间:))


Ray*_* K. 9

正如其他人已经回答的那样,您需要多个ALTER TABLE语句.尝试:

ALTER TABLE tblcommodityOHLC alter column CC_CommodityContractID NUMERIC(18,0);
ALTER TABLE tblcommodityOHLC alter column CM_CommodityID NUMERIC(18,0);
Run Code Online (Sandbox Code Playgroud)

等等


Eva*_*van 5

由于很多人都表示,你将需要使用多个ALTER COLUMN语句,一个是你要修改的每一列。

如果要将表中的所有或部分列修改为同一数据类型(例如将VARCHAR字段从50个字符扩展为100个字符),则可以使用下面的查询自动生成所有语句。如果你要替换多个字段相同的字符(如去除所有列\ T)这一技术也很有用。

SELECT
     TABLE_CATALOG
    ,TABLE_SCHEMA
    ,TABLE_NAME
    ,COLUMN_NAME
    ,'ALTER TABLE ['+TABLE_SCHEMA+'].['+TABLE_NAME+'] ALTER COLUMN ['+COLUMN_NAME+'] VARCHAR(300)' as 'code'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'your_table' AND TABLE_SCHEMA = 'your_schema'
Run Code Online (Sandbox Code Playgroud)

ALTER TABLE将为您为每个列生成一个语句。