如何使用SMO删除并重新创建数据库中的所有视图?

时间:2010-09-01 19:42:19

标签: c# sql-server-2008 smo

我最近将 MSSQL2000 DB 复制到 MSSQL2008 DB 。然后我运行了一个脚本来将表中的所有text / varchar字段更新为与模型db相同的排序规则。但是,我复制的所有视图仍然使用与前一个db相同的排序规则。我发现修复此问题的最简单方法是让MS SQL Management Studio为这些视图创建 DROP / CREATE 脚本。但是,某些视图依赖于其他视图,因此您需要确保以正确的顺序 DROP / CREATE 这些视图。

所以我的问题是:

我如何创建一个遍历的深度,深度优先,每个视图的依赖关系然后返回的脚本会丢弃并创建每个视图?

我假设这将使用SMO。我将用C#编写脚本。

3 个答案:

答案 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,然后让他按顺序运行它们。 玩得开心。