Udostępnij za pośrednictwem


Skryptów

Skryptów w SMO jest kontrolowana przez Scripter obiektu i jego obiektów podrzędność lub Script metoda dla poszczególnych obiektów.The Scripter object controls the mapping out of dependency relationships for objects on an instance of Microsoft SQL Server.

Zaawansowane wykonywanie skryptów za pomocą Scripter obiektu i jego obiektów podrzędność jest procesem trzy fazy:

  1. Odnajdowanie

  2. Generowanie listy

  3. Generowanie skryptu

Faza odnajdowania używa DependencyWalker obiektu.Podana nazwa URN listę obiektów, DiscoverDependencies metoda DependencyWalker zwraca obiekt DependencyTree obiektu dla obiektów na liście nazwy URN.Wartość logiczna fParents parametr jest używany do wybierania czy nadrzędne lub podrzędne określonego obiektu mają zostać odnalezione.Drzewo zależności można modyfikować na tym etapie.

Na liście fazy generowania drzewa jest przekazywana i zwracane wynikowej liście.Obiekt i tej listy w kolejności wykonywanie skryptów można manipulować.

Generowanie listy fazy Użyj WalkDependencies Metoda zwraca DependencyTree.DependencyTree Może być modyfikowany na tym etapie.

W trzeciej i końcowej fazie skryptu jest generowana z określonej listy i opcje obsługi wykonywanie skryptów.Wyniki są zwracane jako StringCollection obiektu systemu.W tej fazie nazwy obiektów zależnych są wyodrębniane z kolekcja elementów DependencyTree obiektów i właściwości takich jak NumberOfSiblings i FirstChild.

Przykład

Aby używać dostarczonych przykładów kodu źródłowego, należy wybrać środowisko, szablon oraz język programowania, które będą używane do tworzenia aplikacji.Aby uzyskać więcej informacji, zobacz Jak Tworzenie projektu SMO Visual Basic w programie Visual Studio.NET lub Jak Tworzenie projektu programu Visual C# SMO w programie Visual Studio.NET.

Poniższy przykład kodu wymaga Imports instrukcja dla obszaru nazw System.Collections.Specialized.Wstaw to w innych instrukcjach przywóz przed wszelkimi deklaracjami w aplikacji.

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

Skrypty poza zależności dla bazy danych w języku Visual Basic

W tym przykładzie kodu pokazano, jak rozpoznać zależności i iterować przez listę wyświetlania wyniki.

' 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

Skrypty poza zależności dla bazy danych w środowisku Visual C#

W tym przykładzie kodu pokazano, jak rozpoznać zależności i iterować przez listę wyświetlania wyniki.

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

Skrypty poza zależności dla bazy danych w PowerShell

W tym przykładzie kodu pokazano, jak rozpoznać zależności i iterować przez listę wyświetlania wyniki.

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