スクリプトの作成Scripting

適用対象: ○SQL Server ○Azure SQL Database○Azure SQL Data Warehouse XParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabaseyesAzure SQL Data Warehouse noParallel Data Warehouse

SMO でのスクリプティングはによって制御されます、Scripterオブジェクトとその子オブジェクトまたはスクリプト個々 のオブジェクトに対するメソッド。Scripting in SMO is controlled by the Scripter object and its child objects, or the Script method on individual objects. Scripterオブジェクトのインスタンス上のオブジェクトの依存関係からのマッピングを制御する MicrosoftMicrosoft SQL ServerSQL Serverします。The Scripter object controls the mapping out of dependency relationships for objects on an instance of MicrosoftMicrosoft SQL ServerSQL Server.

Scripter オブジェクト、およびその子オブジェクトを使用する高度なスクリプティング プロセスには、次の 3 つのフェーズがあります。Advanced scripting by using the Scripter object and its child objects is a three phase process:

  1. 検出Discovery

  2. リスト生成List generation

  3. スクリプト生成Script generation

    検索フェーズでは、DependencyWalker オブジェクトが使用されます。The discovery phase uses the DependencyWalker object. オブジェクトの URN リストが指定されている場合、DiscoverDependencies オブジェクトの DependencyWalker メソッドは、URN リスト内のオブジェクトに対応する DependencyTree オブジェクトを返します。Given an URN list of objects, the DiscoverDependencies method of the DependencyWalker object returns a DependencyTree object for the objects in the URN list. ブール値をfParents親または指定したオブジェクトの子が検出するかどうかを選択するパラメーターを使用します。The Boolean fParents parameter is used to select whether the parents or the children of the specified object are to be discovered. 依存関係ツリーはこの段階で変更することができます。The dependency tree can be modified at this stage.

    リスト生成フェーズでは、このツリーが渡され、結果リストが返されます。In the list generation phase, the tree is passed in and the resulting list is returned. このオブジェクト リストは記述順であり、変更することもできます。This object list is in scripting order and can be manipulated.

    リスト生成フェーズでは、WalkDependencies メソッドを使用して DependencyTree を返します。The list generation phases use the WalkDependencies method to return a DependencyTree. DependencyTree はこの段階で変更することができます。The DependencyTree can be modified at this stage.

    3 番目の最後のフェーズでは、指定されたリストとスクリプティング オプションを使用してスクリプトが生成されます。In the third and final phase, a script is generated with the specified list and scripting options. 結果は StringCollection システム オブジェクトとして返されます。The result is returned as a StringCollection system object. このフェーズで、DependencyTree オブジェクトの Items コレクションおよび NumberOfSiblingsFirstChild などのプロパティから、依存オブジェクト名が抽出されます。In this phase the dependent object names are then extracted from the Items collection of the DependencyTree object and properties such as NumberOfSiblings and FirstChild.

Example

提供されているコード例を使用するには、アプリケーションを作成するプログラミング環境、プログラミング テンプレート、およびプログラミング言語を選択する必要があります。To use any code example that is provided, you will have to choose the programming environment, the programming template, and the programming language in which to create your application. 詳細については、次を参照してください。 Visual C の作成#Visual Studio .NET での SMO プロジェクトします。For more information, see Create a Visual C# SMO Project in Visual Studio .NET.

このコード例は、 Imports System.Collections.Specialized 名前空間のステートメント。This code example requires an Imports statement for the System.Collections.Specialized namespace. アプリケーションの宣言の前、かつ他の Imports ステートメントの後に、次のステートメントを挿入します。Insert this with the other Imports statements, before any declarations in the application.

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

Visual Basic でデータベースの依存関係のスクリプトを作成するScripting Out the Dependencies for a Database in Visual Basic

このコード例では、依存関係を検出する方法と、リストを反復処理して結果を表示する方法を示します。This code example shows how to discover the dependencies and iterate through the list to display the results.

' 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  

Visual C# でデータベースの依存関係のスクリプトを作成するScripting Out the Dependencies for a Database in Visual C#

このコード例では、依存関係を検出する方法と、リストを反復処理して結果を表示する方法を示します。This code example shows how to discover the dependencies and iterate through the list to display the results.

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

PowerShell でデータベースの依存関係のスクリプトを作成するScripting Out the Dependencies for a Database in PowerShell

このコード例では、依存関係を検出する方法と、リストを反復処理して結果を表示する方法を示します。This code example shows how to discover the dependencies and iterate through the list to display the results.

# 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 AdventureWorks2012.  

CD Databases\AdventureWorks2012\Tables  

foreach ($Item in Get-ChildItem)  
 {    
 $scrp.Script($Item)  
 }