Azure sql database Azure SQL数据库v12列类型更改

Azure sql database Azure SQL数据库v12列类型更改,azure-sql-database,Azure Sql Database,我想知道是否有人可以在Azure SQL数据库v12中检查更改列类型的方法。我们希望将一些varchar列转换为支持unicode,因此自v12升级以来,这似乎是最简单的方法: ALTER TABLE table1 ALTER COLUMN column1 nvarchar(max) NULL WITH (ONLINE=ON); ALTER TABLE table1 ALTER COLUMN column2 nvarchar(max) NULL WITH (ONLINE=ON); 我们在v12

我想知道是否有人可以在Azure SQL数据库v12中检查更改列类型的方法。我们希望将一些varchar列转换为支持unicode,因此自v12升级以来,这似乎是最简单的方法:

ALTER TABLE table1 ALTER COLUMN column1 nvarchar(max) NULL WITH (ONLINE=ON);
ALTER TABLE table1 ALTER COLUMN column2 nvarchar(max) NULL WITH (ONLINE=ON);
我们在v12升级之前推迟了这项工作,以便我们可以使用新的“ONLINE=on”开关……希望避免将所有行(数十亿行)从旧表(具有旧列类型)移动到新表(具有新的nvarchar类型),然后在最后重命名的开销

由于新方法感觉“太简单了”,我想问一下我是否遗漏了一些明显的东西。同一个表的多个alter列是否可以绑定到同一个命令中(如果可以,这是否比多次调整表好)


我们可以在升级过程中拨号定价层,并将其安排在最安静的夜间窗口中运行。除此之外,提前感谢社区提供的任何其他可能有帮助的建议

Nvarchar占用了两倍的空间,对于聚集索引表或具有非聚集索引的表,我可以看到更多的缺点,额外的空间增加操作可能会导致碎片(因此您可能需要重建索引)此外,azure中的事务日志增长受到数据库层的限制。此外,您无法运行多个表来改变您尝试的方式,因为它们会一个接一个地运行,每个都会持有一个模式锁。所以我建议您使用第一个选项,创建一个没有索引或约束的表,然后转储数据,然后创建索引。我关心的是模式锁注释……这不是构建“with(ONLINE=ON)”的目的吗?来自BOL,我可以看到,altercolumn联机操作期间的锁定策略遵循用于联机索引构建的相同锁定模式。这意味着在开始和结束时将获得独占锁,尽管此锁非常短暂,但它取决于使用情况…BOL link:。我链接的页面对限制有很好的概述。通过在同一数据库中创建一个带有一些虚拟数据的表来测试这些限制很好NVARCHAR占用了两倍的空间,对于聚集索引表或具有非聚集索引的表,我还看到了一些缺点,额外的空间增加操作可能会导致碎片化(因此您可能需要重建索引)此外,azure中的事务日志增长受到数据库层的限制。此外,您无法运行多个表来改变您尝试的方式,因为它们会一个接一个地运行,每个都会持有一个模式锁。所以我建议您使用第一个选项,创建一个没有索引或约束的表,然后转储数据,然后创建索引。我关心的是模式锁注释……这不是构建“with(ONLINE=ON)”的目的吗?来自BOL,我可以看到,altercolumn联机操作期间的锁定策略遵循用于联机索引构建的相同锁定模式。这意味着在开始和结束时将获得独占锁,尽管此锁的寿命很短,但这取决于使用情况…BOL link:。我链接的页面对限制有很好的概述。通过在同一数据库中创建一个包含一些虚拟数据的表来测试这些限制很好