Generazione di script

In SMO la generazione di script è controllata dall'oggetto Scripter e dai relativi oggetti figlio oppure dal metodo Script in oggetti singoli. L'oggetto Scripter controlla il mapping all'esterno delle relazioni di dipendenza per gli oggetti in un'istanza di MicrosoftSQL Server.

La generazione di script avanzata tramite l'oggetto Scripter e i relativi oggetti figlio è un processo a tre fasi:

  1. Individuazione

  2. Generazione dell'elenco

  3. Generazione dello script

Nella fase di individuazione viene utilizzato l'oggetto DependencyWalker. A partire da un elenco URN di oggetti, il metodo DiscoverDependencies dell'oggetto DependencyWalker restituisce un oggetto DependencyTree per gli oggetti presenti nell'elenco URN. Il parametro fParents booleano consente di stabilire se gli elementi padre o gli elementi figlio dell'oggetto specificato devono essere individuati. In questa fase è possibile modificare l'albero delle dipendenze.

Nella fase di generazione dell'elenco viene passato l'albero e viene restituito l'elenco risultante. Questo elenco di oggetti è ordinato secondo la generazione di script e può essere modificato.

Nelle fasi di generazione dell'elenco viene utilizzato il metodo WalkDependencies per restituire un oggetto DependencyTree. In questa fase è possibile modificare DependencyTree.

Nella terza e ultima fase viene generato uno script con l'elenco e le opzioni di generazione script specificate. Il risultato viene restituito come un oggetto di sistema StringCollection. In questa fase i nomi degli oggetti dipendenti vengono estratti dalla raccolta Elementi dell'oggetto DependencyTree e da proprietà come NumberOfSiblings e FirstChild.

Esempio

Per utilizzare qualsiasi esempio di codice fornito, è necessario scegliere l'ambiente di programmazione, il modello di programmazione e il linguaggio di programmazione per la creazione dell'applicazione. Per ulteriori informazioni, vedere Procedura: Creazione di un progetto Visual Basic SMO in Visual Studio .NET o Procedura: Creazione di un progetto Visual C# SMO in Visual Studio .NET.

Per questo esempio di codice è necessaria un'istruzione Imports per lo spazio dei nomi System.Collections.Specialized. Inserire questa istruzione con le altre istruzioni Imports prima di qualsiasi dichiarazione nell'applicazione.

Imports Microsoft.SqlServer.Management.Smo
Imports Microsoft.SqlServer.Management.Common
Imports System.Collections.Specialized

Generazione di script delle dipendenze per un database in Visual Basic

In questo esempio di codice viene illustrato come individuare le dipendenze e scorrere l'elenco per visualizzare i risultati.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Reference the AdventureWorks database.
Dim db As Database
db = srv.Databases("AdventureWorks")
'Define a Scripter object and set the required scripting options.
Dim scrp As Scripter
scrp = New Scripter(srv)
scrp.Options.ScriptDrops = False
scrp.Options.WithDependencies = True
'Iterate through the tables in database and script each one. Display the script.
'Note that the StringCollection type needs the System.Collections.Specialized namespace to be included.
Dim tb As Table
Dim smoObjects(1) As Urn
For Each tb In db.Tables
    smoObjects = New Urn(0) {}
    smoObjects(0) = tb.Urn
    If tb.IsSystemObject = False Then
        Dim sc As StringCollection
        sc = scrp.Script(smoObjects)
        Dim st As String
        For Each st In sc
            Console.WriteLine(st)
        Next
    End If
Next

Generazione di script delle dipendenze per un database in Visual C#

In questo esempio di codice viene illustrato come individuare le dipendenze e scorrere l'elenco per visualizzare i risultati.

//Connect to the local, default instance of SQL Server. 
{ 
   Server srv = default(Server); 
   srv = new Server(); 
   //Reference the AdventureWorks database. 
   Database db = default(Database); 
   db = srv.Databases("AdventureWorks"); 
   //Define a Scripter object and set the required scripting options. 
   Scripter scrp = default(Scripter); 
   scrp = new Scripter(srv); 
   scrp.Options.ScriptDrops = false; 
   scrp.Options.WithDependencies = true; 
   //Iterate through the tables in database and script each one. Display the script. 
   //Note that the StringCollection type needs the System.Collections.Specialized namespace to be included. 
   Table tb = default(Table); 
   Urn[] smoObjects = new Urn[2]; 
   foreach ( tb in db.Tables) { 
      smoObjects = new Urn[1]; 
      smoObjects(0) = tb.Urn; 
      if (tb.IsSystemObject == false) { 
         StringCollection sc = default(StringCollection); 
         sc = scrp.Script(smoObjects); 
         string st = null; 
         foreach ( st in sc) { 
            Console.WriteLine(st); 
         } 
      } 
   } 
}