是否有方法或查询可以找到SSIS包的版本号(* .dtsx文件)?
我的Team Foundation Server中有*.dtsx
个文件,我想知道。
手动方式是鼠标右键单击包并单击Compare
以查看VersionBuild
,但有数千个包,因此手动执行是不可能的
注意:该过程应该是自动的,而不是手动的
答案 0 :(得分:10)
如果您尝试阅读此软件包中的软件包版本,则可以访问其中一个SSIS system variables
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
属性,详细信息在以下链接中提供:
您可以点这些链接:
它包含实现此问题的查询
要自动阅读PackageFormatVersion
,您可以使用XMLParser
或Regex
以编程方式阅读。我在Vb.net中编写了一个使用Regex
的代码并在目录中循环.dtsx
个文件并获取PackageFormatVersion
属性和dtsx文件头中的其他属性:
首先,我创建了一个名为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
使用RegEx
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 Parser
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
演示应用
我创建了一个演示应用程序来实现此过程,您可以从以下链接下载它:
此外,我为此演示应用
创建了一个新的Git-repository应用截图
您可以在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
答案 1 :(得分:5)
You can use this query if you use project deployment solution (If you have SSISDB in your server) :
SELECT
[name],
[package_format_version]
FROM [SSISDB].[catalog].[packages];
Note: Integration Services must be installed
答案 2 :(得分:2)