sql >> データベース >  >> RDS >> Sqlserver

.Dtsxファイルからのバージョン番号の取得を自動化する

    dtsxパッケージ内の値の取得

    • このパッケージ内のパッケージバージョンを読み取ろうとしている場合は、SSISシステム変数の1つにアクセスできます

      Variable        Type    Description
      -------------------------------------------
      VersionBuild    Int32   The package version.
      VersionComment  String  Comments about the package version.
      VersionGUID     String  The unique identifier of the version.
      VersionMajor    Int32   The major version of the package.
      VersionMinor    Int32   The minor version of the package.
      
    • Package SQL Serverバージョンをお探しの場合は、dtsx内にあります。 テキスト(またはxml)として開いた場合はファイルを作成し、PackageFormatVersionを検索します プロパティ、詳細情報は次のリンクで提供されています:

      • SQL研究-私のSSISパッケージはどのSQLバージョンですか? (このリンクには、以下に記述された表が含まれています)
      • MSDN-SQLServerDenaliでのパッケージ形式の変更

    SQLサーバーに保存されている.dtsxファイルから値を取得する

    次のリンクをたどることができます:

    • ビルフェローズの記事-SSISパッケージクエリ
    • MicrosoftTechNetの記事-msdbデータベースに保存されているすべてのSSISパッケージを一覧表示する

    この問題を解決するクエリが含まれています

    SQLサーバーに保存されていない.dtsxファイルから値を取得する

    PackageFormatVersionの読み取りを自動化するには XMLParserを使用してプログラムで読み取ることができます またはRegexRegexを使用するコードをVb.netで作成しました .dtsxをループします ディレクトリ内のファイルを取得し、PackageFormatVersionを取得します dtsxファイルヘッダーにあるプロパティおよびその他のプロパティ:

    • PackageFileName
    • PackageFormatVersion
    • CreationDate
    • CreationName
    • CreatorComputerName
    • CreatorName
    • DTSID
    • ExecutableType
    • LastModifiedProductVersion
    • LocaleID
    • ObjectName
    • PackageType
    • VersionBuild
    • VersionGUID

    まず、PackageInfoという名前のクラスを作成しました 上記のプロパティが含まれている

    Public Class PackageInfo
    
        Public Property PackageFileName As String
        Public Property PackageFormatVersion As String
        Public Property CreationDate As String
        Public Property CreationName As String
        Public Property CreatorComputerName As String
        Public Property CreatorName As String
        Public Property DTSID As String
        Public Property ExecutableType As String
        Public Property LastModifiedProductVersion As String
        Public Property LocaleID As String
        Public Property ObjectName As String
        Public Property PackageType As String
        Public Property VersionBuild As String
        Public Property VersionGUID As String
    
    
    End Class
    

    正規表現の使用

    Private Sub ReadPackagesInfo(ByVal strDirectory As String)
    
    
            m_lst.Clear()
    
            For Each strFile As String In IO.Directory.GetFiles(strDirectory, "*.dtsx", IO.SearchOption.AllDirectories)
    
    
                Dim strContent As String = ""
    
                Using sr As New IO.StreamReader(strFile)
    
                    strContent = sr.ReadToEnd
                    sr.Close()
    
                End Using
    
    
                Dim strPackageFormatVersion As String = Regex.Match(strContent, "(?<=""PackageFormatVersion"">)(.*)(?=</DTS:Property>)", RegexOptions.Singleline).Value
                Dim strCreationDate As String = Regex.Match(strContent, "(?<=DTS:CreationDate="")(.*?)(?="")", RegexOptions.Singleline).Value
                Dim strCreationName As String = Regex.Match(strContent, "(?<=DTS:CreationName="")(.*?)(?="")", RegexOptions.Singleline).Value
                Dim strCreatorComputerName As String = Regex.Match(strContent, "(?<=DTS:CreatorComputerName="")(.*?)(?="")", RegexOptions.Singleline).Value
                Dim strCreatorName As String = Regex.Match(strContent, "(?<=DTS:CreatorName="")(.*?)(?="")", RegexOptions.Singleline).Value
                Dim strDTSID As String = Regex.Match(strContent, "(?<=DTS:DTSID="")(.*?)(?="")", RegexOptions.Singleline).Value
                Dim strExecutableType As String = Regex.Match(strContent, "(?<=DTS:ExecutableType="")(.*?)(?="")", RegexOptions.Singleline).Value
                Dim strLastModifiedProductVersion As String = Regex.Match(strContent, "(?<=DTS:LastModifiedProductVersion="")(.*?)(?="")", RegexOptions.Singleline).Value
                Dim strLocaleID As String = Regex.Match(strContent, "(?<=DTS:LocaleID="")(.*?)(?="")", RegexOptions.Singleline).Value
                Dim strObjectName As String = Regex.Match(strContent, "(?<=DTS:ObjectName="")(.*?)(?="")", RegexOptions.Singleline).Value
                Dim strPackageType As String = Regex.Match(strContent, "(?<=DTS:PackageType="")(.*?)(?="")", RegexOptions.Singleline).Value
                Dim strVersionBuild As String = Regex.Match(strContent, "(?<=DTS:VersionBuild="")(.*?)(?="")", RegexOptions.Singleline).Value
                Dim strVersionGUID As String = Regex.Match(strContent, "(?<=DTS:VersionGUID="")(.*?)(?="")", RegexOptions.Singleline).Value
    
    
    
                m_lst.Add(New PackageInfo With {.PackageFileName = strFile,
                          .PackageFormatVersion = strPackageFormatVersion,
                          .CreationDate = strCreationDate,
                          .CreationName = strCreationName,
                          .CreatorComputerName = strCreatorComputerName,
                          .CreatorName = strCreatorName,
                          .DTSID = strDTSID,
                          .ExecutableType = strExecutableType,
                          .LastModifiedProductVersion = strLastModifiedProductVersion,
                          .LocaleID = strLocaleID,
                          .ObjectName = strObjectName,
                          .PackageType = strPackageType,
                          .VersionBuild = strVersionBuild,
                         .VersionGUID = strVersionGUID})
    
    
            Next
    
    
    
    End Sub
    

    次のコード行は、PackageFormatVersionを読み取るコードです。 ファイルのプロパティ

    Dim strA As String = Regex.Match(strContent, "(?<=""PackageFormatVersion"">)(.*)(?=</DTS:Property>)", RegexOptions.Singleline).Value
    

    Xmlパーサーの使用

        Private Sub ReadPackagesInfoUsingXmlParser(ByVal strDirectory As String)
    
            m_lst.Clear()
    
            For Each strFile As String In IO.Directory.GetFiles(strDirectory, "*.dtsx", IO.SearchOption.AllDirectories)
    
                Dim strPackageFormatVersion As String = ""
                Dim strCreationDate As String = ""
                Dim strCreationName As String = ""
                Dim strCreatorComputerName As String = ""
                Dim strCreatorName As String = ""
                Dim strDTSID As String = ""
                Dim strExecutableType As String = ""
                Dim strLastModifiedProductVersion As String = ""
                Dim strLocaleID As String = ""
                Dim strObjectName As String = ""
                Dim strPackageType As String = ""
                Dim strVersionBuild As String = ""
                Dim strVersionGUID As String = ""
    
    
                Dim xml = XDocument.Load(strFile)
    
                Dim ns As XNamespace = "www.microsoft.com/SqlServer/Dts"
                Dim man As XmlNamespaceManager = New XmlNamespaceManager(New NameTable())
                man.AddNamespace("DTS", "www.microsoft.com/SqlServer/Dts")
    
                If Not xml.Root Is Nothing AndAlso
                    Not xml.Root.Descendants(ns + "Property").Attributes(ns + "Name") Is Nothing AndAlso
                         xml.Root.Descendants(ns + "Property").Attributes(ns + "Name").Where(Function(x) x.Value = "PackageFormatVersion").Count > 0 Then
    
                    strPackageFormatVersion = xml.Root.Descendants(ns + "Property").Attributes(ns + "Name").Where(Function(x) x.Value = "PackageFormatVersion").FirstOrDefault.Parent.Value
    
                    strCreationDate = If(xml.Root.Attributes(ns + "CreationDate").FirstOrDefault Is Nothing, "", xml.Root.Attributes(ns + "CreationDate").FirstOrDefault.Value)
                    strCreationName = If(xml.Root.Attributes(ns + "CreationName").FirstOrDefault Is Nothing, "", xml.Root.Attributes(ns + "CreationName").FirstOrDefault.Value)
                    strCreatorComputerName = If(xml.Root.Attributes(ns + "CreatorComputerName").FirstOrDefault Is Nothing, "", xml.Root.Attributes(ns + "CreatorComputerName").FirstOrDefault.Value)
                    strCreatorName = If(xml.Root.Attributes(ns + "CreatorName").FirstOrDefault Is Nothing, "", xml.Root.Attributes(ns + "CreatorName").FirstOrDefault.Value)
                    strDTSID = If(xml.Root.Attributes(ns + "DTSID").FirstOrDefault Is Nothing, "", xml.Root.Attributes(ns + "DTSID").FirstOrDefault.Value)
                    strExecutableType = If(xml.Root.Attributes(ns + "ExecutableType").FirstOrDefault Is Nothing, "", xml.Root.Attributes(ns + "ExecutableType").FirstOrDefault.Value)
                    strLastModifiedProductVersion = If(xml.Root.Attributes(ns + "LastModifiedProductVersion").FirstOrDefault Is Nothing, "", xml.Root.Attributes(ns + "LastModifiedProductVersion").FirstOrDefault.Value)
                    strLocaleID = If(xml.Root.Attributes(ns + "LocaleID").FirstOrDefault Is Nothing, "", xml.Root.Attributes(ns + "LocaleID").FirstOrDefault.Value)
                    strObjectName = If(xml.Root.Attributes(ns + "ObjectName").FirstOrDefault Is Nothing, "", xml.Root.Attributes(ns + "ObjectName").FirstOrDefault.Value)
                    strPackageType = If(xml.Root.Attributes(ns + "PackageType").FirstOrDefault Is Nothing, "", xml.Root.Attributes(ns + "PackageType").FirstOrDefault.Value)
                    strVersionBuild = If(xml.Root.Attributes(ns + "VersionBuild").FirstOrDefault Is Nothing, "", xml.Root.Attributes(ns + "VersionBuild").FirstOrDefault.Value)
                    strVersionGUID = If(xml.Root.Attributes(ns + "VersionGUID").FirstOrDefault Is Nothing, "", xml.Root.Attributes(ns + "VersionGUID").FirstOrDefault.Value)
                End If
    
    
    
                m_lst.Add(New PackageInfo With {.PackageFileName = strFile,
                          .PackageFormatVersion = strPackageFormatVersion,
                          .CreationDate = strCreationDate,
                          .CreationName = strCreationName,
                          .CreatorComputerName = strCreatorComputerName,
                          .CreatorName = strCreatorName,
                          .DTSID = strDTSID,
                          .ExecutableType = strExecutableType,
                          .LastModifiedProductVersion = strLastModifiedProductVersion,
                          .LocaleID = strLocaleID,
                          .ObjectName = strObjectName,
                          .PackageType = strPackageType,
                          .VersionBuild = strVersionBuild,
                         .VersionGUID = strVersionGUID})
    
            Next
    
        End Sub
    

    デモアプリ

    この手順を実行するためのデモアプリケーションを作成しました。次のリンクからダウンロードできます。

    • Dropboxダウンロードリンク

    また、このデモアプリ用に新しいGitリポジトリを作成しました

    アプリのスクリーンショット

    TSQLを使用して.dtsxファイルから値を取得する

    あなたはDBA.StackExchangeで私の答えを読むことができます:

    • フォルダ内の複数の.DTSXパッケージファイルのPackageFormatVersionを決定します

    PackageFormatVersionテーブル

    そしてこれがPackageFormatVersionです テーブル値

    SQL Version Build # PackageFormatVersion    Visual Studio Version
    2005        9       2                       2005
    2008        10      3                       2008
    2008 R2     10.5    3                       2008
    2012        11      6                       2010 or BI 2012
    2014        12      8                       2012 CTP2 or 2013
    2016        13      8                       2015
    


    1. 2038年問題とは何ですか?

    2. GreenDAOは、テーブル間の複数の関係をサポートします

    3. MySQL CHAR()とT-SQL CHAR():違いは何ですか?

    4. Node.js MSSQL tedius ConnectionError:localhost:1433への接続に失敗しました-ECONNREFUSEDに接続します