[SQL] 에 .dtsx 파일에서 자동화 버전 번호 검색
SQL에 .dtsx 파일에서 자동화 버전 번호 검색
내가 SSIS 패키지 (*에 .dtsx 파일)의 버전 번호를 찾을 수있는 방법이나 쿼리가 있습니까?
내가 알고 싶어하는 나의 팀 파운데이션 서버의 *에 .dtsx 파일이 있습니다.
수동 방법은 패키지를 마우스 오른쪽 버튼으로 클릭하고 VersionBuild을보고 비교를 클릭 마우스를하는 것입니다하지만 수동으로 그 일을하는 것은 정말 불가능하므로 패키지의 수천 같은있다
참고 : 프로세스가 자동화되어야한다, 수동하지
해결법
-
==============================
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.(당신이 당신의 서버에 SSISDB이있는 경우) 당신이 프로젝트 배포 솔루션을 사용하는 경우에는이 쿼리를 사용할 수 있습니다 :
(당신이 당신의 서버에 SSISDB이있는 경우) 당신이 프로젝트 배포 솔루션을 사용하는 경우에는이 쿼리를 사용할 수 있습니다 :
SELECT [name], [package_format_version] FROM [SSISDB].[catalog].[packages];
참고 : 통합 서비스가 설치되어 있어야합니다
-
==============================
3..ispac 파일은 실제로 zip 파일이며, 모든에 .dtsx는 그 안에 필요한 모든 정보를 XML 파일입니다. 또한 친구가 보낸 답변을, XML 자체는 당신이 원하는 모든 정보를 누르십시오.
.ispac 파일은 실제로 zip 파일이며, 모든에 .dtsx는 그 안에 필요한 모든 정보를 XML 파일입니다. 또한 친구가 보낸 답변을, XML 자체는 당신이 원하는 모든 정보를 누르십시오.
나는 이것이 당신이 도움이되기를 바랍니다 :)
from https://stackoverflow.com/questions/43591672/automate-version-number-retrieval-from-dtsx-files by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] .NET에서 동적 SQL에서 살균 테이블 / 열 이름? (방지 SQL 인젝션) (0) | 2020.05.05 |
---|---|
[SQL] 어떻게 T-SQL을 사용하여 구분 기호 문자를 사용하여 문자열을 분할하려면? (0) | 2020.05.05 |
[SQL] C #을 구성하는 매개 변수 쿼리의 SQL - LIKE %의 (0) | 2020.05.05 |
[SQL] 암시 적 및 명시 적 조인 혼합 (0) | 2020.05.05 |
[SQL] 프로 시저 또는 함수! 지정된 인수를 너무 많이 (0) | 2020.05.05 |