【问题标题】:How to change composite key column type from varchar to nvarchar?如何将复合键列类型从 varchar 更改为 nvarchar?
【发布时间】:2011-10-04 06:48:52
【问题描述】:

我需要将所有 varchar 列更改为 nvarchar 类型。我在此线程 SQL Server - script to update database columns from varchar to nvarchar if not already nvarchar 的帮助下生成了一个脚本。

但是,此脚本无法更改复合主键列。我们的表中有 许多 个复合键,因此无法手动完成。

有没有办法编写从 varchar 复合键到 nvarchar 的更改脚本?

【问题讨论】:

  • 不容易 - 您必须 1) 找到所有包含 varchar 列的 PK,然后 2) 删除所有引用它们的外键约束,3) 删除 PK,4) 更改列类型, 5) 重新创建 PK 和 6) 重新创建所有 FK 约束...都可以编写脚本,但工作量很大......
  • @marc_s 所说的除了我说它相当简单。不过,既费时又乏味。也许有人已经有一个工具来自动化这个......?

标签: sql sql-server-2005 primary-key composite-key sql-scripts


【解决方案1】:

您的数据库有构建流程吗?你有源代码控制系统吗?如果你这样做了,那么我建议你通过在源代码管理中搜索和替换来进行更改,重建数据库,然后使用模式比较工具(如在 Visual Studio 数据库项目或 RedGate 模式比较中)生成更改脚本。

如果您没有构建过程或源代码控制,则可以使用 Management Studio 编写数据库脚本(右键单击数据库,选择所有任务 > 生成脚本)。

【讨论】:

    【解决方案2】:

    我决定部分手动执行此操作。首先,我手动将所有主键从 varchar 更改为 nvarchar(使用 Management Studio)。然后我使用脚本将所有其他(非约束)列更改为 nvarchar。之后,我使用 find-replace 更改了所有视图、存储的过程和触发器。最后,我使用 Red Gate SQL Compare 将数据库与生产数据库进行了比较。

    我还不得不将最终脚本拆分成更小的部分,因为某些表太大而无法同时重建(事务日志填满了整个驱动器)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-15
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 2018-06-03
      相关资源
      最近更新 更多