将varchar更改为nvarchar以用于数据库

时间:2017-03-16 03:44:22

标签: sql sql-server

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

下面的简单SQL由于索引,唯一键和不支持的限制而无法按预期工作。

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

我尝试通过GUI方式从SSMS更改它们,而分析器实际上显示了它真正改变数据类型的作用。

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

这涉及很多步骤,如果我手动完成它会非常麻烦。

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

1 个答案:

答案 0 :(得分:1)

或者你可以:

  1. script whole database without data
  2. 将列定义从VARCHAR更改为NVARCHAR
  3. 使用SSIS或SQL传输数据
  4. <强>优点:

    • 它可能会对源数据库产生较小的影响
    • 您可以将负面影响降至最低,您可以在单独的服务器上运行此功能

    <强>缺点:

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

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

    作为旁注: 我同意@Igor - 如果绝对必须,请不要更改数据类型。