我最近将 MSSQL2000 DB 复制到 MSSQL2008 DB 。然后我运行了一个脚本来将表中的所有text / varchar字段更新为与模型db相同的排序规则。但是,我复制的所有视图仍然使用与前一个db相同的排序规则。我发现修复此问题的最简单方法是让MS SQL Management Studio为这些视图创建 DROP / CREATE 脚本。但是,某些视图依赖于其他视图,因此您需要确保以正确的顺序 DROP / CREATE 这些视图。
所以我的问题是:
我如何创建一个遍历的深度,深度优先,每个视图的依赖关系然后返回的脚本会丢弃并创建每个视图?
我假设这将使用SMO。我将用C#编写脚本。
答案 0 :(得分:2)
你能不能只是迭代并动态执行sp_refreshview?这将实现相同的结果:更新新基表定义的视图。
您没有使用WITH SCHEMABINDING(否则无法更改表),因此依赖性或深度无关紧要。
答案 1 :(得分:0)
在这样的情况下,只运行脚本很多次(SSMS f5),最终所有子视图在父级使用时都会存在。你可以知道什么时候一切都好,因为没有错误。
答案 2 :(得分:0)
尝试DBSourceTools。 http://dbsourcetools.codeplex.com。
此实用程序使用SMO将所有数据库对象和数据编写到磁盘(使用DROP / CREATE)脚本
它还会自动构建一个依赖树,并按所需顺序重新创建数据库对象
将2000 DB编写到磁盘后,为2008数据库创建“部署目标”数据库
然后,您可以创建一整套补丁来更改/升级/重命名所有视图
DBSourceTools将为您重建数据库,然后按顺序应用所有补丁
它是一种可靠,可重复的数据库版本控制方法,允许您对这些补丁进行测试和版本控制
当您准备好发布时,只需将所有补丁发送到您的DBA,然后让他按顺序运行它们。
玩得开心。