我需要将大约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文件。
发布于 2021-03-12 17:09:45
应该在哪里完成转换:在旧的SQL上,还是在Azure上移动它之后?
我会首先在本地SQLServer上这样做,在Azure数据库上运行它,可能会导致您遇到一些问题,比如触及DTU限制,磁盘IO节流。
是已删除的varchar列打包到备份表中,还是备份/还原也删除了已删除的列?
空间不会被释放回文件系统,备份也不会处理空闲空间,因此在继续之前,您将不会看到there.You想要在dbcc可清理表上读取更多的更改。
是否可以使用通用的SQL脚本实现进程的自动化?还是有必要为每个表编写脚本?
它可以是自动化的,您可以使用动态sql查看列类型,而进程further.You也必须查看这些列中是否有一部分是索引的一部分,如果是这样,则必须首先删除它们。
https://stackoverflow.com/questions/66603942
复制相似问题