繁体   English   中英

将数据库中所有表列的varchar更改为nvarchar

[英]Changing varchar to nvarchar for all table columns in a database

有没有一种方法可以完全遍历数据库中的所有表并将所有varchar数据类型更改为nvarchar数据类型?

由于索引,唯一键和其他条件的限制,下面的简单SQL无法按预期工作。

ALTER TABLE [CUS].[Customers] 
    ALTER COLUMN [CustomerNo] NVARCHAR(500);

我尝试通过GUI方式从SSMS更改它们,而探查器实际上显示了如何真正更改数据类型。

  • 步骤1:创建一个临时表,将nvarchar列从varchar更改为
  • 步骤2:设置一些锁定升级(不知道这是什么)
  • 步骤3:将所有数据从原始表插入到临时表
  • 步骤4:删除原始表格
  • 步骤5:将临时表重命名为原始表的名称
  • 步骤6:添加约束
  • 步骤7:添加索引

这涉及很多步骤,而且如果我手动进行,会很麻烦。

谁能为我的问题提出更灵活的解决方案?

或者,您可以:

  1. 脚本化整个数据库而没有数据
  2. 将列定义从VARCHAR更改为NVARCHAR
  3. 使用SSIS或SQL传输数据

优点:

  • 它对源数据库的影响可能较小
  • 如果可以在单独的服务器上运行它,则可以将影响最小化

缺点:

  • 您将必须传输所有数据,这需要时间
  • 您必须确保服务器上有足够的磁盘空间来存储数据库数据,索引数据和日志文件

根据您选择的传输方法和表的大小,即使您处于简单恢复模式,日志文件也可能会变得很大。 当您在一个巨大的事务中传输大量数据时,这是最坏的情况。

附带说明: 我同意@Igor-除非绝对必要,否则不要更改数据类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM