복붙노트

[SQL] 에 .dtsx 파일에서 자동화 버전 번호 검색

SQL

에 .dtsx 파일에서 자동화 버전 번호 검색

내가 SSIS 패키지 (*에 .dtsx 파일)의 버전 번호를 찾을 수있는 방법이나 쿼리가 있습니까?

내가 알고 싶어하는 나의 팀 파운데이션 서버의 *에 .dtsx 파일이 있습니다.

수동 방법은 패키지를 마우스 오른쪽 버튼으로 클릭하고 VersionBuild을보고 비교를 클릭 마우스를하는 것입니다하지만 수동으로 그 일을하는 것은 정말 불가능하므로 패키지의 수천 같은있다

참고 : 프로세스가 자동화되어야한다, 수동하지

해결법

  1. ==============================

    1.당신은이 링크를 따라 할 수 있습니다 :

    당신은이 링크를 따라 할 수 있습니다 :

    그것은이 문제를 달성 쿼리를 포함

    읽기 PackageFormatVersion를 자동화하기 위해 당신은 프로그래밍 방식으로 XmlParser가 또는 정규식을 사용하여 읽을 수 있습니다. 나는 디렉토리 내부에 .dtsx 파일을 통해 정규식과 루프를 사용하고 PackageFormatVersion 속성을 얻을 및 기타 속성이 dtsx 파일 헤더에있는 Vb.net에서 코드를 작성 :

    우선은 위에 나열된 속성을 포함 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
    

    데모 앱

    나는 다음 링크에서 다운로드 할 수 있습니다이 절차를 달성하기 위해 데모 응용 프로그램을 만든 :

    또한 나는이 데모 애플리케이션을위한 새로운 힘내-저장소를 생성

    앱 스크린 샷

    당신은 DBA.StackExchange에서 내 대답을 읽을 수 있습니다 :

    그리고 여기에 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
    
  2. ==============================

    2.(당신이 당신의 서버에 SSISDB이있는 경우) 당신이 프로젝트 배포 솔루션을 사용하는 경우에는이 쿼리를 사용할 수 있습니다 :

    (당신이 당신의 서버에 SSISDB이있는 경우) 당신이 프로젝트 배포 솔루션을 사용하는 경우에는이 쿼리를 사용할 수 있습니다 :

    SELECT 
       [name],
       [package_format_version]
    FROM [SSISDB].[catalog].[packages];
    

    참고 : 통합 서비스가 설치되어 있어야합니다

  3. ==============================

    3..ispac 파일은 실제로 zip 파일이며, 모든에 .dtsx는 그 안에 필요한 모든 정보를 XML 파일입니다. 또한 친구가 보낸 답변을, XML 자체는 당신이 원하는 모든 정보를 누르십시오.

    .ispac 파일은 실제로 zip 파일이며, 모든에 .dtsx는 그 안에 필요한 모든 정보를 XML 파일입니다. 또한 친구가 보낸 답변을, XML 자체는 당신이 원하는 모든 정보를 누르십시오.

    나는 이것이 당신이 도움이되기를 바랍니다 :)

  4. from https://stackoverflow.com/questions/43591672/automate-version-number-retrieval-from-dtsx-files by cc-by-sa and MIT license