【问题标题】:Get schema name for dependent objects with SMO使用 SMO 获取依赖对象的架构名称
【发布时间】:2011-01-11 11:44:49
【问题描述】:

使用 SSIS 中的源脚本组件,我试图检索依赖于表的所有对象的详细信息。到目前为止,我有对象类型和名称,但无法检索架构。有谁知道如何在 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

【问题讨论】:

    标签: ssis schema smo


    【解决方案1】:

    嘿,ekoner, 我有工作代码遍历数据库中的依赖树,并通过简单的字符串解析解决了这个问题。

    您的骨灰盒会以

    的形式被退回
    ///StoredProcedure[@Name='uspUpdateEmployeeHireInfo' and @Schema='HumanResources']
    


    只需解析 @Name,然后解析 @Schema。

    下载 DBSourceTools 的源代码:http://dbsourcetools.codeplex.com
    看看 DBSourceToolsLib.SysObjects.UrnParser 以及用于工作示例的 DBSourceToolsLib.SysObjects.SODependencyTree。

    【讨论】:

      猜你喜欢
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 2018-02-23
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 2019-05-17
      相关资源
      最近更新 更多