Compartir a través de


Generación de scripts

El objeto Scripter y sus objetos secundarios o el método Script en objetos individuales controlan la generación de scripts en SMO. El objeto Scripter controla la asignación de las relaciones de dependencia para los objetos en una instancia de MicrosoftSQL Server.

La generación avanzada de scripts utilizando el objeto Scripter y sus objetos secundarios es un proceso de tres fases:

  1. Detección

  2. Generación de lista

  3. Generación de scripts

La fase de detección utiliza el objeto DependencyWalker. Dada una lista de URN de objetos, el método DiscoverDependencies del objeto DependencyWalker devuelve un objeto DependencyTree para los objetos en la lista URN. El parámetro booleano fParents se utiliza para seleccionar si los elementos principales o secundarios del objeto especificado se deben detectar. El árbol de dependencia se puede modificar en esta fase.

En la fase de generación de lista, el árbol se pasa y se devuelve la lista resultante. Esta lista de objetos aparece en orden de scripts y se puede manipular.

La fase de generación de la lista utiliza el método WalkDependencies para devolver DependencyTree. DependencyTree se puede modificar en esta fase.

En la tercera y última fase, se genera un script con la lista especificada y las opciones de script. El resultado se devuelve como un objeto de sistema StringCollection. En esta fase los nombres de objeto dependientes se extraen a continuación de la recopilación Elementos del objeto DependencyTree y de propiedades como NumberOfSiblings y FirstChild.

Ejemplo

Para utilizar cualquier ejemplo de código que se proporcione, deberá elegir el entorno de programación, la plantilla de programación y el lenguaje de programación en los que crear su aplicación. Para obtener más información, vea Cómo crear un proyecto de Visual Basic SMO en Visual Studio .NET o Cómo crear un proyecto de Visual C# SMO en Visual Studio .NET.

Este ejemplo de código requiere una instrucción Imports para el espacio de nombres System.Collections.Specialized. Inserte esto con las otras instrucciones Imports, antes de cualquier declaración en la aplicación.

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

Generar scripts de las dependencias de una base de datos en Visual Basic

En este ejemplo de código se muestra cómo detectar las dependencias y cómo recorrer en iteración la lista para mostrar los resultados.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Reference the AdventureWorks database.
Dim db As Database
db = srv.Databases("AdventureWorks")
'Define a Scripter object and set the required scripting options.
Dim scrp As Scripter
scrp = New Scripter(srv)
scrp.Options.ScriptDrops = False
scrp.Options.WithDependencies = True
'Iterate through the tables in database and script each one. Display the script.
'Note that the StringCollection type needs the System.Collections.Specialized namespace to be included.
Dim tb As Table
Dim smoObjects(1) As Urn
For Each tb In db.Tables
    smoObjects = New Urn(0) {}
    smoObjects(0) = tb.Urn
    If tb.IsSystemObject = False Then
        Dim sc As StringCollection
        sc = scrp.Script(smoObjects)
        Dim st As String
        For Each st In sc
            Console.WriteLine(st)
        Next
    End If
Next

Generar scripts de las dependencias de una base de datos en Visual C#

En este ejemplo de código se muestra cómo detectar las dependencias y cómo recorrer en iteración la lista para mostrar los resultados.

//Connect to the local, default instance of SQL Server. 
{ 
   Server srv = default(Server); 
   srv = new Server(); 
   //Reference the AdventureWorks database. 
   Database db = default(Database); 
   db = srv.Databases("AdventureWorks"); 
   //Define a Scripter object and set the required scripting options. 
   Scripter scrp = default(Scripter); 
   scrp = new Scripter(srv); 
   scrp.Options.ScriptDrops = false; 
   scrp.Options.WithDependencies = true; 
   //Iterate through the tables in database and script each one. Display the script. 
   //Note that the StringCollection type needs the System.Collections.Specialized namespace to be included. 
   Table tb = default(Table); 
   Urn[] smoObjects = new Urn[2]; 
   foreach ( tb in db.Tables) { 
      smoObjects = new Urn[1]; 
      smoObjects(0) = tb.Urn; 
      if (tb.IsSystemObject == false) { 
         StringCollection sc = default(StringCollection); 
         sc = scrp.Script(smoObjects); 
         string st = null; 
         foreach ( st in sc) { 
            Console.WriteLine(st); 
         } 
      } 
   } 
}