【问题标题】:How to include the schema when scripting SQL Server stored procedures?在编写 SQL Server 存储过程脚本时如何包含架构?
【发布时间】:2012-01-17 09:18:56
【问题描述】:

我试图强制 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) 放在存储的过程前面。谁能解释一下?

【问题讨论】:

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


    【解决方案1】:

    我在 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];  
    }
    

    (我没有测试过)

    我猜存储过程最初是在没有指定架构的情况下创建的,这就是脚本的内容。要获得模式限定的脚本,您需要强制执行脚本选项,并且会丢失任何 cmets 和格式(这是来自 MSDN 的文章)。

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

    【讨论】:

    • 设置.EnforceScriptingOptons = True 脚本选项已经成功了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多