如何一次性将所有 varchar 列/变量/参数转换为 nvarchar 类型?

Posted

技术标签:

【中文标题】如何一次性将所有 varchar 列/变量/参数转换为 nvarchar 类型?【英文标题】:How do you convert all varchar columns/variables/parameters to nvarchar type in one go? 【发布时间】:2018-04-27 04:25:27 【问题描述】:

我有一个包含近 1000 个tables 的数据库。所有文本类型字段均为varchar 类型。它也有近 1000 多个 stored proceduresfunctions。 这些proceduresfunctions 有自己的varchar 参数和varchar 变量。 我需要将每个varchar 类型字段转换为nvarchar 类型在每个table, procedures and functions 中一次。 当然,我可以一个一个地完成,但手动完成需要数年时间。

我不需要更改大小。如果是varchar(50)。我想要像nvarchar(50) 这样的输出。大小没有变化。

【问题讨论】:

看看这个 - ***.com/questions/1327548/… 感谢我搜索了类似的问题,但没有找到。 但是它也转换过程的参数和变量吗? 否,以上链接解决方案不会转换过程的参数和变量。 对于 SP,您可以使用 SSMS 编写脚本,然后使用您喜欢的文本编辑器进行搜索/替换。您可以在之后重新部署它们。 【参考方案1】:

当然,我可以一个一个地完成,但手动完成需要数年时间。

这似乎是您问题的答案,好像“一次性”在一次交易中需要数年时间,那么这必须根据您必须执行的维护窗口以可消化的块执行。

首先考虑任何 PK-FK 执行顺序的表 接下来是视图,除非任何视图是模式绑定的,否则您必须按此顺序删除视图 - 更改表 - 重新创建视图。 然后是函数和 SP。

如果可能,获取数据库的副本,应用所有更改,然后在当前的 prod 数据库和那个数据库之间进行切换。这假设您可以安排确保在进行切换时当前数据库中的所有产品数据都在副本中。

【讨论】:

以上是关于如何一次性将所有 varchar 列/变量/参数转换为 nvarchar 类型?的主要内容,如果未能解决你的问题,请参考以下文章

一次特殊的“VARCHAR转numeric失败”错误记录

如何把SQL datetime转换成varchar

列、参数或变量 #10:找不到数据类型

用大于 8000 的大小替换所有 varchar 列声明

sqlserver中float转varchar时不显示科学计数法

R语言使用table1包绘制(生成)三线表使用单变量分列构建三线表设置transpose参数转置三线表变量作为列,子组(strata)作为行