Partilhar via


Scripting

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do AzureBanco de Dados SQL do Azure Synapse Analyticsno Microsoft Fabric

O script no SMO é controlado pelo Scripter objeto e seus objetos filho ou pelo método Script em objetos individuais. O Scripter objeto controla o mapeamento de relações de dependência para objetos em uma instância do Microsoft SQL Server.

O script avançado usando o Scripter objeto e seus objetos filho é um processo de três fases:

  1. Discovery

  2. Geração de listas

  3. Geração de guiões

A fase de descoberta usa o DependencyWalker objeto. Dada uma lista de objetos URN, o DiscoverDependencies método do DependencyWalker objeto retorna um DependencyTree objeto para os objetos na lista URN. O parâmetro Boolean fParents é usado para selecionar se os pais ou filhos do objeto especificado devem ser descobertos. A árvore de dependência pode ser modificada nesta fase.

Na fase de geração da lista, a árvore é passada e a lista resultante é retornada. Esta lista de objetos está em ordem de script e pode ser manipulada.

As fases de geração de lista usam o WalkDependencies método para retornar um DependencyTreearquivo . O DependencyTree pode ser modificado nesta fase.

Na terceira e última fase, um script é gerado com a lista especificada e as opções de script. O resultado é retornado como um StringCollection objeto do sistema. Nesta fase, os nomes de objetos dependentes são extraídos da coleção Items do DependencyTree objeto e de propriedades como NumberOfSiblings e FirstChild.

Example

Para usar qualquer exemplo de código fornecido, você terá que escolher o ambiente de programação, o modelo de programação e a linguagem de programação na qual criar seu aplicativo. Para obter mais informações, consulte Criar um projeto SMO do Visual C# no Visual Studio .NET.

Este exemplo de código requer uma instrução Imports para o namespace System.Collections.Specialized. Insira isso com as outras instruções de importação, antes de quaisquer declarações no aplicativo.

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

Criando scripts para fora as dependências de um banco de dados no Visual Basic

Este exemplo de código mostra como descobrir as dependências e iterar pela lista para exibir os 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  

Criando scripts para fora das dependências de um banco de dados no Visual C#

Este exemplo de código mostra como descobrir as dependências e iterar pela lista para exibir os 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("--");  
         }  
      }   
   }  
}  

Criando scripts para fora das dependências de um banco de dados no PowerShell

Este exemplo de código mostra como descobrir as dependências e iterar pela lista para exibir os 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 AdventureWorks2022.  
  
CD Databases\AdventureWorks2022\Tables  
  
foreach ($Item in Get-ChildItem)  
 {    
 $scrp.Script($Item)  
 }