Gerando scripts

A geração de scripts no SMO é controlada pelo objeto Scripter e seus objetos filho, ou pelo método Script em objetos individuais. O objeto Scripter controla o mapeamento fora de relações de dependência para objetos em uma instância do MicrosoftSQL Server.

A geração de scripts avançada usando o objeto Scripter e seus objetos filhos é um processo trifásico:

  1. Descoberta

  2. Geração de lista

  3. Geração de scripts

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

Na fase de geração de lista, a árvore é transmitida e a lista resultante é retornada. Essa lista de objetos está em ordem de scripts e pode ser manipulada.

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

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

Exemplo

Para usar qualquer exemplo de código fornecido, será necessário escolher o ambiente de programação, o modelo de programação e a linguagem de programação para criar o seu aplicativo. Para obter mais informações, consulte Como criar um projeto SMO do Visual Basic no Visual Studio .NET ou Como 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 isto junto com as outras instruções Imports, antes de qualquer declaração do aplicativo.

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

Gerando scripts das dependências para 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.

'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

Gerando scripts das dependências para 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.

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