Condividi tramite


Scrittura di script

Lo scripting in SMO è controllato dall'oggetto Scripter e dai relativi oggetti figlio o dal Script metodo su singoli oggetti. L'oggetto Scripter controlla il mapping delle relazioni di dipendenza per gli oggetti in un'istanza di MicrosoftSQL Server.

Lo scripting avanzato tramite l'oggetto e i Scripter relativi oggetti figlio è un processo in tre fasi:

  1. Scoperta

  2. Generazione elenco

  3. Generazione di script

La fase di individuazione usa l'oggetto DependencyWalker . Dato un elenco URN di oggetti, il DiscoverDependencies metodo dell'oggetto DependencyWalker restituisce un DependencyTree oggetto per gli oggetti nell'elenco URN. Il parametro booleano fParents viene utilizzato per selezionare se i genitori o gli elementi figlio dell'oggetto specificato devono essere individuati. L'albero delle dipendenze può essere modificato in questa fase.

Nella fase di generazione dell'elenco, l'albero viene passato e viene restituito l'elenco risultante. Questo elenco di oggetti è in ordine di scripting e può essere modificato.

Le fasi di generazione dell'elenco usano il WalkDependencies metodo per restituire un oggetto DependencyTree. L'oggetto DependencyTree può essere modificato in questa fase.

Nella terza e ultima fase viene generato uno script con l'elenco e le opzioni di scripting specificati. Il risultato viene restituito come StringCollection oggetto di sistema. In questa fase i nomi degli oggetti dipendenti vengono quindi estratti dall'insieme Items dell'oggetto DependencyTree e delle proprietà, NumberOfSiblings ad esempio e FirstChild.

Esempio

Per usare qualsiasi esempio di codice fornito, è necessario scegliere l'ambiente di programmazione, il modello di programmazione e il linguaggio di programmazione in cui creare l'applicazione. Per altre informazioni, vedere Creare un progetto SMO di Visual Basic in Visual Studio .NET o Creare un progetto SMO visual C# in Visual Studio .NET.

Questo esempio di codice richiede un'istruzione Imports per lo spazio dei nomi System.Collections.Specialized. Inserirlo 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  

Creazione di script per le dipendenze per un database in Visual Basic

Questo esempio di codice illustra come individuare le dipendenze e scorrere l'elenco per visualizzare i risultati.

' compile with:   
' /r:Microsoft.SqlServer.Smo.dll   
' /r:Microsoft.SqlServer.ConnectionInfo.dll   
' /r:Microsoft.SqlServer.Management.Sdk.Sfc.dll   
  
Imports Microsoft.SqlServer.Management.Smo  
Imports Microsoft.SqlServer.Management.Sdk.Sfc  
  
Public Class A  
   Public Shared Sub Main()  
      ' database name  
      Dim dbName As [String] = "AdventureWorksLT2012"   ' database name  
  
      ' Connect to the local, default instance of SQL Server.   
      Dim srv As New Server()  
  
      ' Reference the database.    
      Dim db As Database = srv.Databases(dbName)  
  
      ' Define a Scripter object and set the required scripting options.   
      Dim scrp As New Scripter(srv)  
      scrp.Options.ScriptDrops = False  
      scrp.Options.WithDependencies = True  
      scrp.Options.Indexes = True   ' To include indexes  
      scrp.Options.DriAllConstraints = True   ' to include referential constraints in the script  
  
      ' Iterate through the tables in database and script each one. Display the script.  
      For Each tb As Table In db.Tables  
         ' check if the table is not a system table  
         If tb.IsSystemObject = False Then  
            Console.WriteLine("-- Scripting for table " + tb.Name)  
  
            ' Generating script for table tb  
            Dim sc As System.Collections.Specialized.StringCollection = scrp.Script(New Urn() {tb.Urn})  
            For Each st As String In sc  
               Console.WriteLine(st)  
            Next  
            Console.WriteLine("--")  
         End If  
      Next  
   End Sub  
End Class  

Creazione di script per le dipendenze per un database in Visual C#

Questo esempio di codice illustra come individuare le dipendenze e scorrere l'elenco per visualizzare i risultati.

// compile with:   
// /r:Microsoft.SqlServer.Smo.dll   
// /r:Microsoft.SqlServer.ConnectionInfo.dll   
// /r:Microsoft.SqlServer.Management.Sdk.Sfc.dll   
  
using System;  
using Microsoft.SqlServer.Management.Smo;  
using Microsoft.SqlServer.Management.Sdk.Sfc;  
  
public class A {  
   public static void Main() {   
      String dbName = "AdventureWorksLT2012"; // database name  
  
      // Connect to the local, default instance of SQL Server.   
      Server srv = new Server();  
  
      // Reference the database.    
      Database db = srv.Databases[dbName];  
  
      // Define a Scripter object and set the required scripting options.   
      Scripter scrp = new Scripter(srv);  
      scrp.Options.ScriptDrops = false;  
      scrp.Options.WithDependencies = true;  
      scrp.Options.Indexes = true;   // To include indexes  
      scrp.Options.DriAllConstraints = true;   // to include referential constraints in the script  
  
      // Iterate through the tables in database and script each one. Display the script.     
      foreach (Table tb in db.Tables) {   
         // check if the table is not a system table  
         if (tb.IsSystemObject == false) {  
            Console.WriteLine("-- Scripting for table " + tb.Name);  
  
            // Generating script for table tb  
            System.Collections.Specialized.StringCollection sc = scrp.Script(new Urn[]{tb.Urn});  
            foreach (string st in sc) {  
               Console.WriteLine(st);  
            }  
            Console.WriteLine("--");  
         }  
      }   
   }  
}  

Creazione di script per le dipendenze per un database in PowerShell

Questo esempio di codice illustra come individuare le dipendenze e scorrere l'elenco per visualizzare i risultati.

# Set the path context to the local, default instance of SQL Server.  
CD \sql\localhost\default  
  
# Create a Scripter object and set the required scripting options.  
$scrp = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Scripter -ArgumentList (Get-Item .)  
$scrp.Options.ScriptDrops = $false  
$scrp.Options.WithDependencies = $true  
$scrp.Options.IncludeIfNotExists = $true  
  
# Set the path context to the tables in AdventureWorks2012.  
CD Databases\AdventureWorks2012\Tables  
  
foreach ($Item in Get-ChildItem)  
 {    
 $scrp.Script($Item)  
 }