Dela via


Scripting

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-databas i Förhandsversion av Microsoft Fabric

Skript i SMO styrs av Scripter objektet och dess underordnade objekt, eller skriptmetoden på enskilda objekt. Objektet Scripter styr mappningen av beroenderelationer för objekt på en instans av Microsoft SQL Server.

Avancerad skriptning med hjälp Scripter av objektet och dess underordnade objekt är en trefasprocess:

  1. Discovery

  2. List generation

  3. Script generation

Identifieringsfasen använder objektet DependencyWalker . Med tanke på en URN-lista över objekt DiscoverDependencies returnerar -metoden DependencyWalker för objektet ett DependencyTree objekt för objekten i URN-listan. Parametern Boolesk fParents används för att välja om överordnade eller underordnade objekt i det angivna objektet ska identifieras. Beroendeträdet kan ändras i det här skedet.

I listgenereringsfasen skickas trädet in och den resulterande listan returneras. Den här objektlistan är i skriptordning och kan manipuleras.

I listgenereringsfaserna används WalkDependencies metoden för att returnera en DependencyTree. DependencyTree Kan ändras i det här skedet.

I den tredje och sista fasen genereras ett skript med de angivna list- och skriptalternativen. Resultatet returneras som ett StringCollection systemobjekt. I den här fasen extraheras de beroende objektnamnen från objektsamlingen DependencyTree för objektet och egenskaper som NumberOfSiblings och FirstChild.

Example

Om du vill använda ett kodexempel som tillhandahålls måste du välja programmeringsmiljö, programmeringsmallen och programmeringsspråket för att skapa ditt program. Mer information finns i Skapa ett Visual C# SMO-projekt i Visual Studio .NET.

Det här kodexemplet kräver en Import-instruktion för namnområdet System.Collections.Specialized. Infoga detta med de andra importinstruktionerna före eventuella deklarationer i programmet.

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

Skripta ut beroenden för en databas i Visual Basic

Det här kodexemplet visar hur du identifierar beroendena och itererar genom listan för att visa resultatet.

' 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  

Skripta ut beroenden för en databas i Visual C#

Det här kodexemplet visar hur du identifierar beroendena och itererar genom listan för att visa resultatet.

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

Skripta ut beroenden för en databas i PowerShell

Det här kodexemplet visar hur du identifierar beroendena och itererar genom listan för att visa resultatet.

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