首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL:如何将所有表中的varchar列更改为nvarchar?

SQL:如何将所有表中的varchar列更改为nvarchar?
EN

Stack Overflow用户
提问于 2021-03-12 16:48:26
回答 2查看 156关注 0票数 0

我需要将大约40个表(填充数据)中的所有varchar列转换为nvarchar列。计划在专用的MS服务器中执行此操作,该服务器仅用于此目的。结果应该移到Azure SQL中。

转换应该在哪里完成:在旧SQL上,还是在Azure SQL Server上移动它之后?

根据Rusanu的答案https://stackoverflow.com/a/8157951/1346705,在过程中创建了新的nvarchar列,删除了旧的varchar列。空间可以由DBCC CLEANTABLE或使用ALTER TABLE ... REBUILD回收。是否将已删除的varchar列打包到备份表中,还是备份/还原也删除了已删除的列?

可以使用通用SQL脚本实现进程的自动化吗?还是有必要为每个表编写脚本?

上下文::我们是企业信息系统第三方。我们的产品从信息系统SQL数据库中读取数据,并以在IS中实现的代价高昂的方式呈现数据。企业信息系统现在已迁移到新版本,并将在Azure SQL上运行。IS的数据库发生了很大变化,其中一项更改是放弃旧的8位文本编码(varchar),转而使用Unicode (nvarchar)。我们的系统还用于收集手工输入的数据--使用与旧系统相同的编码。

迁移将通过执行旧版本的备份(生成xxx.bak文件的SqlCmd)来完成,在另一个好的旧server上恢复。然后,我们运行脚本,删除可以从IS中重构的所有表、视图和存储过程。主要原因之一是,SQL代码使用了新的备份工具SqlPackage.exe不接受的特性来生成xxx.bacpac文件。然后在Azure SQL中还原bacpac文件。

EN

Stack Overflow用户

回答已采纳

发布于 2021-03-12 17:09:45

应该在哪里完成转换:在旧的SQL上,还是在Azure上移动它之后?

我会首先在本地SQLServer上这样做,在Azure数据库上运行它,可能会导致您遇到一些问题,比如触及DTU限制,磁盘IO节流。

是已删除的varchar列打包到备份表中,还是备份/还原也删除了已删除的列?

空间不会被释放回文件系统,备份也不会处理空闲空间,因此在继续之前,您将不会看到there.You想要在dbcc可清理表上读取更多的更改。

是否可以使用通用的SQL脚本实现进程的自动化?还是有必要为每个表编写脚本?

它可以是自动化的,您可以使用动态sql查看列类型,而进程further.You也必须查看这些列中是否有一部分是索引的一部分,如果是这样,则必须首先删除它们。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66603942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档