Création de scripts

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

L'écriture de scripts avancés à l'aide de l'objet Scripter et ses objets enfants est un processus en trois phases :

  1. Découverte

  2. Génération de la liste

  3. Génération du script

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

Dans la phase de la génération de la liste, l'arborescence est transmise et la liste résultante est retournée. Cette liste d'objets suit l'ordre d'écriture du script et peut être manipulée.

Les phases de génération de la liste utilisent la méthode WalkDependencies pour retourner un objet DependencyTree. L'objet DependencyTree peut être modifié à ce stade.

Au cours de la troisième et dernière phase, un script est généré à l'aide de la liste et des options spécifiées. Le résultat est retourné sous la forme d'un objet système StringCollection. Au cours de cette phase, les noms des objets dépendants sont extraits de la collection Items des objets et propriétés DependencyTree, comme NumberOfSiblings et FirstChild.

Exemple

Pour utiliser un exemple de code fourni, vous devrez sélectionner l'environnement, le modèle et le langage de programmation dans lequel créer votre application. Pour plus d'informations, consultez Procédure : créer un projet SMO Visual Basic dans Visual Studio .NET ou Procédure : créer un projet SMO Visual C# dans Visual Studio .NET.

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

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

Écriture sous forme de scripts des dépendances pour une base de données en Visual Basic

Cet exemple de code montre comment découvrir les dépendances et parcourir 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] = "AdventureWorksLT2008R2"   ' 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

Écriture sous forme de scripts des dépendances pour une base de données en Visual C#

Cet exemple de code montre comment découvrir les dépendances et parcourir 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 = "AdventureWorksLT2008R2"; // 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("--");
         }
      } 
   }
}

Écriture sous forme de scripts des dépendances pour une base de données dans PowerShell

Cet exemple de code montre comment découvrir les dépendances et parcourir 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 AdventureWorks2008.

CD Databases\AdventureWorks2008R2\Tables

foreach ($Item in Get-ChildItem)
 {  
 $scrp.Script($Item)
 }