如何将复合键列类型从 varchar 更改为 nvarchar?
Posted
技术标签:
【中文标题】如何将复合键列类型从 varchar 更改为 nvarchar?【英文标题】:How to change composite key column type from varchar to 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 所说的除了我说它相当简单。不过,既费时又乏味。也许有人已经有一个工具来自动化这个......? 【参考方案1】:您的数据库有构建流程吗?你有源代码控制系统吗?如果你这样做了,那么我建议你通过在源代码管理中搜索和替换来进行更改,重建数据库,然后使用模式比较工具(如在 Visual Studio 数据库项目或 RedGate 模式比较中)生成更改脚本。
如果您没有构建过程或源代码控制,则可以使用 Management Studio 编写数据库脚本(右键单击数据库,选择所有任务 > 生成脚本)。
【讨论】:
【参考方案2】:我决定部分手动执行此操作。首先,我手动将所有主键从 varchar 更改为 nvarchar(使用 Management Studio)。然后我使用脚本将所有其他(非约束)列更改为 nvarchar。之后,我使用 find-replace 更改了所有视图、存储的过程和触发器。最后,我使用 Red Gate SQL Compare 将数据库与生产数据库进行了比较。
我还不得不将最终脚本拆分成更小的部分,因为某些表太大而无法同时重建(事务日志填满了整个驱动器)。
【讨论】:
以上是关于如何将复合键列类型从 varchar 更改为 nvarchar?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不丢失 Xampp 中的数据的情况下将类型从 varchar 更改为 Date
如何在 Postgresql 中使用 ALTER 将 VARCHAR 类型更改为 DATETIME?