Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL-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:
Discovery
List generation
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)
}