2011-01-11 1 views
0

SSISでソーススクリプトコンポーネントを使用して、テーブルに依存するすべてのオブジェクトの詳細を取得しようとしています。今のところ、私はオブジェクトの型と名前を持っていますが、スキーマを検索することはできません。誰もSMOでこれを達成する方法を知っていますか?SMOで従属オブジェクトのスキーマ名を取得

私のスクリプトコンポーネントのコードは次のとおりです。

' Microsoft SQL Server Integration Services user script component 
' This is your new script component in Microsoft Visual Basic .NET 
' ScriptMain is the entrypoint class for script components 

Imports System 
Imports System.Data 
Imports System.Math 
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper 
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper 
Imports Microsoft.SqlServer.Management.Smo 
Imports Microsoft.SqlServer.Management.Common 

Public Class ScriptMain 
    Inherits UserComponent 

    Public Overrides Sub CreateNewOutputRows() 
     ' 
     ' 
     ' 
     Dim TargetSQLServer As Server 
     Dim TargetDatabase As Database 
     Dim TargetTable As Table 
     Dim uc As New UrnCollection() 
     Dim dw As New DependencyWalker 
     Dim dt As DependencyTree 
     Dim dc As DependencyCollection 
     Dim dcn As DependencyCollectionNode 
     Dim sp As New Scripter 
     Dim outputString As String 

     TargetSQLServer = New Server("localhost") 
     TargetDatabase = TargetSQLServer.Databases("AdventureWorks") 


     For Each TargetTable In TargetDatabase.Tables 
      ' Exclude these objects 
      If TargetTable.IsSystemObject = False Then 
       uc = New UrnCollection() 
       uc.Add(TargetTable.Urn) 
       sp = New Scripter 
       sp.Server = TargetSQLServer 

       ' Get dependencies 
       dw = New DependencyWalker 
       dw.Server = TargetSQLServer 
       dt = dw.DiscoverDependencies(uc, DependencyType.Children) 
       sp = New Scripter(TargetSQLServer) 

       dc = New DependencyCollection 
       dc = sp.WalkDependencies(dt) 
       outputString = "" 
       For Each dcn In dc 
        Me.Output0Buffer.AddRow() 
        Me.Output0Buffer.Database = TargetDatabase.Name.ToString 

        Me.Output0Buffer.Table = TargetTable.Name.ToString 

        outputString = dcn.Urn.ToString 
        Me.Output0Buffer.Dependency.AddBlobData(Text.Encoding.GetEncoding(1252).GetBytes(outputString)) 

        Me.Output0Buffer.ObjectType = dcn.Urn.Type.ToString 

        outputString = dcn.Urn.GetNameForType(dcn.Urn.Type.ToString).ToString 
        Me.Output0Buffer.ObjectName.AddBlobData(Text.Encoding.GetEncoding(1252).GetBytes(outputString)) 

        outputString = "" 
        Me.Output0Buffer.Schema.AddBlobData(Text.Encoding.GetEncoding(1252).GetBytes(outputString)) 
       Next 
      End If 
     Next 

    End Sub 

End Class 

答えて

0

ekonerねえ、 私はデータベースに依存関係ツリーを歩くコードを働いてきた、と単純な文字列解析の問題を解決しました。

あなたの壷が返されますだけ@Schemaため、その後@Nameのために解析し、

///StoredProcedure[@Name='uspUpdateEmployeeHireInfo' and @Schema='HumanResources'] 


の形態です。

DBSourceToolsのソースコードのダウンロード:http://dbsourcetools.codeplex.com
を実施例についてDBSourceToolsLib.SysObjects.UrnParser もDBSourceToolsLib.SysObjects.SODependencyTreeを見てください。

関連する問題