Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
Descubrimiento
Generación de listas
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)
}