2011-12-10 29 views
1

ストアドプロシージャ、UDFおよびビューのオブジェクト名をスキーマ修飾するようにSMOを強制しようとしていますが、何らかの理由でSMOが機能しません。私は、スキーマなしでストアドプロシージャを持って、デフォルトのスキーマがそれに事前保留持っている必要がありますしている: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]; 

} 

それは入れていません格納されたprcocedureの前にスキーマ名(dbo)があります。誰もこれを説明できますか?

答えて

3

I 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の記事をご覧ください)。

これはビューと関数にも当てはまります。

+0

'.EnforceScriptingOptons = True'スクリプトオプションを設定すると、そのトリックが完了しました。ありがとう! – Intrepid

関連する問題