Создание сценария
Создание сценария в SMO управляется объектом Scripter и его дочерними объектами или методом Script на отдельных объектах. Объект Scripter управляет сопоставлением связей зависимости для объектов экземпляра MicrosoftSQL Server.
Расширенное создание сценария с помощью объекта Scripter и его дочерних объектов является процессом из трех фаз.
Обнаружение
Создание списка
Создание сценария
Фаза обнаружения использует объект DependencyWalker. Учитывая URN-список объектов, метод DiscoverDependencies объекта DependencyWalker возвращает объект DependencyTree объектам в URN-списке. Логический параметр fParents используется для выбора объектов, родительских или дочерних, которые необходимо обнаружить в указанном объекте. На данном этапе можно изменить дерево зависимостей.
На фазе создания списка передается дерево и возвращается результирующий список. Данный список объекта существует в порядке создания сценария, и им можно управлять.
Фазы создания списка используют метод WalkDependencies для возвращения объекта DependencyTree. На данной фазе можно изменить объект DependencyTree.
В третьей и последней фазе сценарий формируется с указанным списком и параметрами создания сценария. Этот результат возвращается в виде системного объекта StringCollection. На этой фазе имена зависимых объектов извлекаются из коллекции Items объекта DependencyTree и свойств, таких как NumberOfSiblings и FirstChild.
Пример
Чтобы использовать предоставленный пример кода при создании собственного приложения, необходимо выбрать среду разработки, шаблон программирования и язык программирования. Дополнительные сведения см. в разделе Как создать проект SMO на языке Visual Basic в среде Visual Studio .NET или Как создать проект SMO на языке Visual C# в среде Visual Studio .NET.
Данный пример кода требует инструкцию Imports для пространства имен System.Collections.Specialized. Вставьте инструкцию с другими инструкциями Imports и перед любыми декларациями в приложении.
Imports Microsoft.SqlServer.Management.Smo
Imports Microsoft.SqlServer.Management.Common
Imports System.Collections.Specialized
Создание сценария зависимостей для базы данных на языке Visual Basic
Данный пример кода показывает, как обнаруживать зависимости и просматривать список для отображения результатов.
'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
Создание сценария зависимостей для базы данных на языке Visual C#
Данный пример кода показывает, как обнаруживать зависимости и просматривать список для отображения результатов.
//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);
}
}
}
}