Freigeben über


Skripterstellung

Skripting in SMO wird durch das Scripter Objekt und seine untergeordneten Objekte oder die Script Methode für einzelne Objekte gesteuert. Das Scripter Objekt steuert die Zuordnung von Abhängigkeitsbeziehungen für Objekte in einer Instanz von MicrosoftSQL Server.

Das erweiterte Skripting mithilfe des Scripter Objekts und seiner untergeordneten Objekte ist ein dreistufiger Prozess:

  1. Ermittlung

  2. Listengenerierung

  3. Skriptgenerierung

In der Ermittlungsphase wird das DependencyWalker Objekt verwendet. Bei einer URN-Liste von Objekten gibt die DiscoverDependencies Methode des DependencyWalker Objekts ein DependencyTree Objekt für die Objekte in der URN-Liste zurück. Der boolesche fParents-Parameter wird verwendet, um auszuwählen, ob die übergeordneten Elemente oder die untergeordneten Elemente des angegebenen Objekts ermittelt werden sollen. Die Abhängigkeitsstruktur kann zu diesem Zeitpunkt geändert werden.

In der Phase der Listengenerierung wird die Struktur übergeben, und die resultierende Liste wird zurückgegeben. Diese Objektliste befindet sich in der Skriptreihenfolge und kann bearbeitet werden.

Die Phasen der Listengenerierung verwenden die WalkDependencies Methode, um ein DependencyTree. Dies DependencyTree kann zu diesem Zeitpunkt geändert werden.

In der dritten und letzten Phase wird ein Skript mit den angegebenen Listen- und Skriptoptionen generiert. Das Ergebnis wird als StringCollection Systemobjekt zurückgegeben. In dieser Phase werden die abhängigen Objektnamen dann aus der Items-Auflistung des Objekts und eigenschaften DependencyTree wie NumberOfSiblings und FirstChild.

Beispiel

Um ein codebeispiel zu verwenden, das bereitgestellt wird, müssen Sie die Programmierumgebung, die Programmiervorlage und die Programmiersprache auswählen, in der Ihre Anwendung erstellt werden soll. Weitere Informationen finden Sie unter Erstellen eines Visual Basic-SMO-Projekts in Visual Studio .NET oder Erstellen eines Visual C#-SMO-Projekts in Visual Studio .NET.

In diesem Codebeispiel ist eine Imports Anweisung für den System.Collections.Specialized-Namespace erforderlich. Fügen Sie dies mit den anderen Imports-Anweisungen vor allen Deklarationen in der Anwendung ein.

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

Skripting out the Dependencies for a Database in Visual Basic

In diesem Codebeispiel wird gezeigt, wie Sie die Abhängigkeiten ermitteln und die Liste durchlaufen, um die Ergebnisse anzuzeigen.

' 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  

Skripting out the Dependencies for a Database in Visual C#

In diesem Codebeispiel wird gezeigt, wie Sie die Abhängigkeiten ermitteln und die Liste durchlaufen, um die Ergebnisse anzuzeigen.

// 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("--");  
         }  
      }   
   }  
}  

Skripting out the Dependencies for a Database in PowerShell

In diesem Codebeispiel wird gezeigt, wie Sie die Abhängigkeiten ermitteln und die Liste durchlaufen, um die Ergebnisse anzuzeigen.

# 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)  
 }