我试图强制SMO为存储过程,UDF和视图构建限定对象名称,但由于某种原因它不起作用。我有一个没有架构的存储过程,需要预先设置默认架构:
我有这段代码:
var procs = from sp in _smoDB.StoredProcedures.OfType<StoredProcedure>()
where !sp.IsSystemObject && !sp.IsEncrypted
select sp;
foreach ( StoredProcedure sproc in procs ) {
var script = sproc.Script( ScriptOption.SchemaQualify );
var scriptText = script[3];
}
当我访问脚本文本时,它没有将架构名称(dbo)放在存储的prcocedure前面。谁能解释一下呢?
答案 0 :(得分:4)
我没有在2008 / R2(仅2005年)与SMO合作过,所以我可能会遗漏一些东西,但这就是我要尝试的东西:
var procs = from sp in _smoDB.StoredProcedures.OfType<StoredProcedure>()
where !sp.IsSystemObject && !sp.IsEncrypted
select sp;
var options = new ScriptOptions(); // reusable ScriptOptions object
options.SchemaQualify = true;
options.EnforceScriptingOptions = true; // surprise!
foreach ( StoredProcedure sproc in procs )
{
var script = sproc.Script( options );
var scriptText = script[3];
}
(我没有测试过这个)
我猜测存储过程最初是在没有指定架构的情况下创建的,而这正是脚本编写的。要获得符合架构的脚本,您需要强制执行脚本选项,并且会丢失任何注释和格式(这里是MSDN中的文章)。
我相信这也适用于视图和函数。