如何在编写SQL Server存储过程的脚本时包含模式?

时间:2011-12-10 12:05:43

标签: c# sql-server-2008-r2 smo

我试图强制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前面。谁能解释一下呢?

1 个答案:

答案 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中的文章)。

我相信这也适用于视图和函数。