2011-12-10 24 views
1

我试图强制SMO模式限定存储过程,UDF和视图的对象名称,但由于某种原因它不起作用。我有一个存储过程,没有模式,需要有默认模式前置于它:如何在脚本编写SQL Server存储过程时包含模式?

我有这样的代码:

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)。任何人都可以解释吗?

回答

3

我还没有和SMO在2008/R2(仅适用于2005年)的工作,所以我可能失去了一些东西,但这里是什么我想尝试:

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

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

+0

设置'.EnforceScriptingOptons = True'脚本选项已经成功了。感谢你! – Intrepid