Delen via


Scripting

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-database in Microsoft Fabric Preview

Scripting in SMO wordt beheerd door het Scripter object en de onderliggende objecten, of de scriptmethode voor afzonderlijke objecten. Het Scripter object bepaalt de toewijzing van afhankelijkheidsrelaties voor objecten op een exemplaar van Microsoft SQL Server.

Geavanceerde scripting met behulp van het Scripter object en de onderliggende objecten is een proces met drie fasen:

  1. Discovery

  2. List generation

  3. Script generation

In de detectiefase wordt het DependencyWalker object gebruikt. Op basis van een URN-lijst met objecten retourneert de DiscoverDependencies methode van het DependencyWalker object een DependencyTree object voor de objecten in de URN-lijst. De booleaanse parameter fParents wordt gebruikt om te selecteren of de ouders of de onderliggende elementen van het opgegeven object moeten worden gedetecteerd. De afhankelijkheidsstructuur kan in deze fase worden gewijzigd.

In de fase voor het genereren van de lijst wordt de structuur doorgegeven en wordt de resulterende lijst geretourneerd. Deze objectlijst heeft een scriptvolgorde en kan worden bewerkt.

De fases voor het genereren van de lijst gebruiken de WalkDependencies methode om een DependencyTree. De DependencyTree kan in deze fase worden gewijzigd.

In de derde en laatste fase wordt een script gegenereerd met de opgegeven lijst- en scriptopties. Het resultaat wordt geretourneerd als een StringCollection systeemobject. In deze fase worden de namen van afhankelijke objecten vervolgens geëxtraheerd uit de verzameling Items van het DependencyTree object en eigenschappen zoals NumberOfSiblings en FirstChild.

Example

Als u een codevoorbeeld wilt gebruiken dat is opgegeven, moet u de programmeeromgeving, de programmeersjabloon en de programmeertaal kiezen waarin u uw toepassing wilt maken. Zie Een Visual C# SMO-project maken in Visual Studio .NETvoor meer informatie.

Voor dit codevoorbeeld is een importinstructie vereist voor de naamruimte System.Collections.Specialized. Voeg deze in met de andere importinstructies, vóór eventuele declaraties in de toepassing.

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

De afhankelijkheden voor een database uitvoeren in Visual Basic

In dit codevoorbeeld ziet u hoe u de afhankelijkheden detecteert en door de lijst bladert om de resultaten weer te geven.

' 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  

De afhankelijkheden voor een database in Visual C uitvoeren#

In dit codevoorbeeld ziet u hoe u de afhankelijkheden detecteert en door de lijst bladert om de resultaten weer te geven.

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

De afhankelijkheden voor een database in PowerShell uitvoeren

In dit codevoorbeeld ziet u hoe u de afhankelijkheden detecteert en door de lijst bladert om de resultaten weer te geven.

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