Partager via


Écriture de scripts

L’écriture de scripts dans SMO est contrôlée par l’objet Scripter et ses objets enfants, ou la Script méthode sur des objets individuels. L’objet Scripter contrôle le mappage des relations de dépendance pour les objets sur une instance de MicrosoftSQL Server.

Le script avancé à l’aide de l’objet Scripter et de ses objets enfants est un processus en trois phases :

  1. Découverte

  2. Génération de liste

  3. Génération de script

La phase de découverte utilise l’objet DependencyWalker . Étant donné une liste URN d’objets, la DiscoverDependencies méthode de l’objet DependencyWalker renvoie un DependencyTree objet pour les objets de la liste URN. Le paramètre fParents booléen est utilisé pour déterminer si les parents ou les enfants de l’objet spécifié doivent être découverts. L’arborescence de dépendances peut être modifiée à ce stade.

Dans la phase de génération de liste, l’arborescence est passée et la liste résultante est retournée. Cette liste d’objets est dans l’ordre de script et peut être manipulée.

Les phases de génération de liste utilisent la WalkDependencies méthode pour retourner un DependencyTree. Vous DependencyTree pouvez le modifier à ce stade.

Dans la troisième et dernière phase, un script est généré avec les options de liste et de script spécifiées. Le résultat est retourné en tant qu’objet StringCollection système. Dans cette phase, les noms d’objets dépendants sont ensuite extraits de la collection Items de l’objet DependencyTree et des propriétés telles que NumberOfSiblings et FirstChild.

Exemple :

Pour utiliser un exemple de code fourni, vous devez choisir l’environnement de programmation, le modèle de programmation et le langage de programmation dans lequel créer votre application. Pour plus d’informations, consultez Créer un projet SMO Visual Basic dans Visual Studio .NET ou créer un projet SMO Visual C# dans Visual Studio .NET.

Cet exemple de code nécessite une Imports instruction pour l’espace de noms System.Collections.Specialized. Insérez-la avec les autres instructions Imports, avant toute déclaration dans l’application.

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

Script de dépendances pour une base de données en Visual Basic

Cet exemple de code montre comment découvrir les dépendances et effectuer une itération dans la liste pour afficher les résultats.

' 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  

Script des dépendances pour une base de données en Visual C#

Cet exemple de code montre comment découvrir les dépendances et effectuer une itération dans la liste pour afficher les résultats.

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

Script des dépendances pour une base de données dans PowerShell

Cet exemple de code montre comment découvrir les dépendances et effectuer une itération dans la liste pour afficher les résultats.

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