我希望SMO不要编写视图脚本,所以我这样做
var transfer = new Transfer(database)
{
CopyAllTables = true,
CopyAllDefaults = false,
CopyAllStoredProcedures = true,
CopyAllDatabaseTriggers = true,
CopyAllObjects = false,
CopyAllPartitionFunctions = false,
CopyAllPartitionSchemes = false,
CopyAllRoles = false,
CopyAllRules = true,
CopyAllSchemas = true,
CopyAllSqlAssemblies = false,
CopyAllSynonyms = false,
CopyAllUserDefinedAggregates = true,
CopyAllUserDefinedDataTypes = true,
CopyAllUserDefinedFunctions = true,
CopyAllUserDefinedTypes = true,
CopyAllUsers = false,
CopyAllViews = false,
Options =
{
WithDependencies = true,
DriAll = true,
Triggers = true,
Indexes = true,
SchemaQualifyForeignKeysReferences = true,
ExtendedProperties = true,
IncludeDatabaseRoleMemberships = false,
Permissions = true,
IncludeDatabaseContext = true
},
PreserveDbo = true,
};
transfer.ScriptTransfer()
但视图仍然是脚本化的。
我真的希望能够使用transfer,因为它似乎是在不编写更多代码的情况下以依赖顺序编写对象脚本的唯一方法。我设置 “CopyAllObjects = false”,因为我认为这可能导致我设置的其他选项被忽略,但它似乎没有任何好处。
我的目标是单独编写视图脚本,因为我有一个数据库服务器,视图相互依赖,需要在所有数据库中的视图上使用dependencywalker,以依赖顺序编写脚本。
请帮帮忙?
答案 0 :(得分:0)
我没有完全修复它,但最终过滤掉了任何带有“创建视图”的行。所以我打电话给
transfer.ScriptTransfer().Cast<string>().ToList()
除非我遗漏了某些东西,否则选项SMO中的很多这些标志(如CopyAllUsers)似乎只是在感觉它时才会受到尊重。 :(当某些选项看起来完全像我需要但不起作用时,这是一种耻辱。