你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

.alter column 命令

更改现有表列的数据类型。

警告

更改列的数据类型后,该列中的任何预先存在的数据会在将来的查询中返回 null 值。 使用 .alter column 后,即使通过使用另一个命令将列类型更改回以前的值,也无法恢复列中的数据。 如果需要保留预先存在的数据,请参阅用于在不丢失数据的情况下更改列类型的建议过程

权限

你必须至少具有表管理员权限才能运行此命令。

语法

.altercolumn [DatabaseName.] TableName.ColumnNametype=ColumnNewType

详细了解语法约定

参数

名称 类型 必需 说明
DatabaseName string 包含表的数据库的名称。
TableName string ✔️ 包含要更改的列的表的名称。
ColumnName string ✔️ 要更改的列的名称。
ColumnNewType string ✔️ 列的新数据类型

示例

.alter column ['Table'].['ColumnX'] type=string

在不丢失数据的情况下更改列类型

若要在保留历史数据的同时更改列类型,请创建一个具有正确类型的新表。

对于要在其中更改列类型的每个表 T1,请执行以下步骤:

  1. 使用正确的架构(正确的列类型和相同的列顺序)创建表 T1_prime

  2. 将数据从 T1 引入 T1_prime,应用所需的数据转换。 在下面的示例中,将 Col1 转换为字符串数据类型。

    .set-or-append T1_prime <| T1 | extend Col1=tostring(Col1)
    
  3. 使用 .rename tables 命令交换表,这一命令允许交换表名称。

    .rename tables T_prime=T1, T1=T_prime
    

    命令完成后,现有引入管道中的新数据将流向现已正确键入的 T1

  4. 删除表 T1_prime

    T1_prime 将仅包含历史数据(架构更改之前的数据)的副本,在确认 T1 中的架构和数据已正确更新后可以安全地删除它。

    .drop table T1_prime
    

示例:

将表 T1 中的列“Col1”数据类型从 GUID 更改为字符串。

// Create table T1
.create table T1 (Col1:guid, Id:int)

// Ingest sample data into T1
.ingest inline into table T1 <|
b642dec0-1040-4eac-84df-a75cfeba7aa4,1
c224488c-ad42-4e6c-bc55-ae10858af58d,2
99784a64-91ad-4897-ae0e-9d44bed8eda0,3
d8857a93-2728-4bcb-be1d-1a2cd35386a7,4
b1ddcfcc-388c-46a2-91d4-5e70aead098c,5

// Create table T1_prime with the correct schema and same column order
.create table T1_prime (Col1:string, Id:int)

// Append data to the new table
.set-or-append T1_prime <| T1 | extend Col1=tostring(Col1)

// Rename tables
.rename tables T1_prime = T1, T1 = T1_prime

// Drop table T1_prime, which now has the old schema and data
.drop table T1_prime