Compartir a través de


Escritura de scripts

El scripting en SMO se controla mediante el Scripter objeto y sus objetos secundarios, o el Script método en objetos individuales. El Scripter objeto controla la asignación de relaciones de dependencia para objetos en una instancia de MicrosoftSQL Server.

El scripting avanzado mediante el Scripter objeto y sus objetos secundarios es un proceso de tres fases:

  1. Descubrimiento

  2. Generación de listas

  3. Generación de scripts

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

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

Las fases de generación de listas usan el WalkDependencies método para devolver un DependencyTree. se DependencyTree puede modificar en esta fase.

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

Ejemplo

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

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

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

Creación de 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 recorrer en iteración la lista para mostrar los resultados.

' 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  

Creación de 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 recorrer en iteración la lista para mostrar los resultados.

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

Creación de scripts de las dependencias de una base de datos en PowerShell

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

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