我知道我可以编辑每个单独的 DTS 包并将其保存为 Visual Basic 脚本,但是服务器上有数百个包,这将需要很长时间。如何一次编写所有脚本?我希望能够为每个包创建一个文件,以便我可以将它们签入源代码控制,搜索它们以查看哪个引用了特定表,或者将开发服务器上的包与生产服务器上的包进行比较。
4537 次
4 回答
2
我最终挖掘了 SQL 2000 文档(构建 SQL Server 应用程序/DTS 编程/编程 DTS 应用程序/DTS 对象模型)并创建了一个 VBS 脚本来读取包和编写 XML 文件。它并不完整,可以通过多种方式进行改进,但这是一个很好的开始:
GetPackages.vbs
选项显式
子 GetProperties(strPackageName、dtsProperties、xmlDocument、xmlProperties)
Dim dtsProperty
如果不是 dtsProperties 什么都不是,那么
对于 dtsProperties 中的每个 dtsProperty
如果 dtsProperty.Set 然后
暗淡 xmlProperty
设置 xmlProperty = xmlProperties.insertBefore (_
xmlDocument.createElement(“属性”),_
xmlProperties.selectSingleNode ("Property[@Name > '" & dtsProperty.Name & "']"))
'特性
'xmlProperty.setAttribute "Get", dtsProperty.Get
'xmlProperty.setAttribute "Set", dtsProperty.Set
xmlProperty.setAttribute "类型", dtsProperty.Type
xmlProperty.setAttribute "名称", dtsProperty.Name
如果不是 isnull(dtsProperty.Value) 则
xmlProperty.setAttribute "值", dtsProperty.Value
万一
'集合
'获取属性的属性会导致堆栈溢出
'GetProperties strPackageName, dtsProperty.Properties, xmlDocument, xmlProperty.appendChild (xmlDocument.createElement ("Properties"))
万一
下一个
万一
结束子
子 GetOLEDBProperties (strPackageName, dtsOLEDBProperties, xmlDocument, xmlOLEDBProperties)
暗淡 dtsOLEDB 属性
对于 dtsOLEDBProperties 中的每个 dtsOLEDBProperty
如果 dtsOLEDBProperty.IsDefaultValue = 0 那么
暗淡 xmlOLEDB 属性
设置 xmlOLEDBProperty = xmlOLEDBProperties.insertBefore (_
xmlDocument.createElement ("OLEDBProperty"), _
xmlOLEDBProperties.selectSingleNode ("OLEDBProperty[@Name > '" & dtsOLEDBProperty.Name & "']"))
'特性
xmlOLEDBProperty.setAttribute “名称”,dtsOLEDBProperty.Name
'xmlOLEDBProperty.setAttribute "PropertyID", dtsOLEDBProperty.PropertyID
'xmlOLEDBProperty.setAttribute "PropertySet", dtsOLEDBProperty.PropertySet
xmlOLEDBProperty.setAttribute“值”,dtsOLEDBProperty.Value
'xmlOLEDBProperty.setAttribute "IsDefaultValue", dtsOLEDBProperty.IsDefaultValue
'集合
'这些属性和上面的一样
'GetProperties strPackageName, dtsOLEDBProperty.Properties, xmlDocument, xmlOLEDBProperty.appendChild (xmlDocument.createElement ("Properties"))
万一
下一个
结束子
子 GetConnections (strPackageName, dtsConnections, xmlDocument, xmlConnections)
暗淡 dtsConnection2
对于 dtsConnections 中的每个 dtsConnection2
暗淡xmlConnection2
设置 xmlConnection2 = xmlConnections.insertBefore (_
xmlDocument.createElement ("Connection2"), _
xmlConnections.selectSingleNode ("Connection2[@Name > '" & dtsConnection2.Name & "']"))
'特性
xmlConnection2.setAttribute "ID", dtsConnection2.ID
xmlConnection2.setAttribute "名称", dtsConnection2.Name
xmlConnection2.setAttribute "ProviderID", dtsConnection2.ProviderID
'集合
GetProperties strPackageName, dtsConnection2.Properties, xmlDocument, xmlConnection2.appendChild (xmlDocument.createElement ("Properties"))
调暗 dtsOLEDB 属性
出错时继续下一步
设置 dtsOLEDBProperties = dtsConnection2.ConnectionProperties
如果 Err.Number = 0 那么
出错时转到 0
GetOLEDBProperties strPackageName, dtsOLEDBProperties, xmlDocument, xmlConnection2.appendChild (xmlDocument.createElement ("ConnectionProperties"))
别的
MsgBox Err.Description & vbCrLf & "ProviderID: " & dtsConnection2.ProviderID & vbCrLf & "连接名称: " & dtsConnection2.Name, , strPackageName
出错时转到 0
万一
下一个
结束子
子 GetGlobalVariables (strPackageName, dtsGlobalVariables, xmlDocument, xmlGlobalVariables)
暗淡 dtsGlobalVariable2
对于 dtsGlobalVariables 中的每个 dtsGlobalVariable2
暗淡 xmlGlobalVariable2
设置 xmlGlobalVariable2 = xmlGlobalVariables.insertBefore (_
xmlDocument.createElement ("GlobalVariable2"), _
xmlGlobalVariables.selectSingleNode ("GlobalVariable2[@Name > '" & dtsGlobalVariable2.Name & "']"))
'特性
xmlGlobalVariable2.setAttribute "名称", dtsGlobalVariable2.Name
If Not Isnull(dtsGlobalVariable2.Value) Then
xmlGlobalVariable2.setAttribute "Value", dtsGlobalVariable2.Value
万一
'没有扩展属性
'集合
'GetProperties strPackageName, dtsGlobalVariable2.Properties, xmlDocument, xmlGlobalVariable2.appendChild (xmlDocument.createElement ("Properties"))
下一个
结束子
子 GetSavedPackageInfos (strPackageName, dtsSavedPackageInfos, xmlDocument, xmlSavedPackageInfos)
暗淡 dtsSavedPackageInfo
对于 dtsSavedPackageInfos 中的每个 dtsSavedPackageInfo
暗淡 xmlSavedPackageInfo
设置 xmlSavedPackageInfo = xmlSavedPackageInfos.appendChild (xmlDocument.createElement ("SavedPackageInfo"))
'特性
xmlSavedPackageInfo.setAttribute "描述",dtsSavedPackageInfo.Description
xmlSavedPackageInfo.setAttribute "IsVersionEncrypted", dtsSavedPackageInfo.IsVersionEncrypted
xmlSavedPackageInfo.setAttribute "PackageCreationDate", dtsSavedPackageInfo.PackageCreationDate
xmlSavedPackageInfo.setAttribute "PackageID", dtsSavedPackageInfo.PackageID
xmlSavedPackageInfo.setAttribute "PackageName", dtsSavedPackageInfo.PackageName
xmlSavedPackageInfo.setAttribute "VersionID", dtsSavedPackageInfo.VersionID
xmlSavedPackageInfo.setAttribute "VersionSaveDate", dtsSavedPackageInfo.VersionSaveDate
下一个
结束子
子 GetPrecedenceConstraints (strPackageName, dtsPrecedenceConstraints, xmlDocument, xmlPrecedenceConstraints)
暗淡 dtsPrecedenceConstraint
对于 dtsPrecedenceConstraints 中的每个 dtsPrecedenceConstraint
暗淡xmlPrecedenceConstraint
设置 xmlPrecedenceConstraint = xmlPrecedenceConstraints.insertBefore (_
xmlDocument.createElement ("PrecedenceConstraint"), _
xmlPrecedenceConstraints.selectSingleNode ("PrecedenceConstraint[@StepName > '" & dtsPrecedenceConstraint.StepName & "']"))
'特性
xmlPrecedenceConstraint.setAttribute "StepName", dtsPrecedenceConstraint.StepName
'集合
GetProperties strPackageName, dtsPrecedenceConstraint.Properties, xmlDocument, xmlPrecedenceConstraint.appendChild (xmlDocument.createElement ("Properties"))
下一个
结束子
子 GetSteps (strPackageName, dtsSteps, xmlDocument, xmlSteps)
调暗 dtsStep2
对于 dtsSteps 中的每个 dtsStep2
调暗 xmlStep2
设置 xmlStep2 = xmlSteps.insertBefore (_
xmlDocument.createElement ("Step2"), _
xmlSteps.selectSingleNode ("Step2[@Name > '" & dtsStep2.Name & "']"))
'特性
xmlStep2.setAttribute "名称", dtsStep2.Name
xmlStep2.setAttribute "描述", dtsStep2.Description
'集合
GetProperties strPackageName, dtsStep2.Properties, xmlDocument, xmlStep2.appendChild (xmlDocument.createElement ("Properties"))
GetPrecedenceConstraints strPackageName, dtsStep2.PrecedenceConstraints, xmlDocument, xmlStep2.appendChild (xmlDocument.createElement ("PrecedenceConstraints"))
下一个
结束子
子 GetColumns (strPackageName, dtsColumns, xmlDocument, xmlColumns)
调暗 dtsColumn
对于 dtsColumns 中的每个 dtsColumn
暗淡 xmlColumn
设置 xmlColumn = xmlColumns.appendChild (xmlDocument.createElement ("Column"))
GetProperties strPackageName, dtsColumn.Properties, xmlDocument, xmlColumn.appendChild (xmlDocument.createElement ("Properties"))
下一个
结束子
子 GetLookups (strPackageName, dtsLookups, xmlDocument, xmlLookups)
暗淡 dtsLookup
对于 dtsLookups 中的每个 dtsLookup
暗淡 xmlLookup
设置 xmlLookup = xmlLookups.appendChild (xmlDocument.createElement ("Lookup"))
GetProperties strPackageName, dtsLookup.Properties, xmlDocument, xmlLookup.appendChild (xmlDocument.createElement ("Properties"))
下一个
结束子
子 GetTransformations (strPackageName, dtsTransformations, xmlDocument, xmlTransformations)
Dim dtsTransformation
对于 dtsTransformations 中的每个 dtsTransformation
暗淡 xmlTransformation
设置 xmlTransformation = xmlTransformations.appendChild (xmlDocument.createElement ("Transformation"))
GetProperties strPackageName, dtsTransformation.Properties, xmlDocument, xmlTransformation.appendChild (xmlDocument.createElement ("Properties"))
下一个
结束子
子 GetTasks (strPackageName, dtsTasks, xmlDocument, xmlTasks)
调暗 dtsTask
对于 dtsTasks 中的每个 dtsTask
暗淡xml任务
设置 xmlTask = xmlTasks.insertBefore (_
xmlDocument.createElement(“任务”),_
xmlTasks.selectSingleNode ("Task[@Name > '" & dtsTask.Name & "']"))
' 任务可以是任何类型的任务,每种类型的任务都有不同的属性。
'特性
xmlTask.setAttribute "CustomTaskID", dtsTask.CustomTaskID
xmlTask.setAttribute "名称", dtsTask.Name
xmlTask.setAttribute "描述", dtsTask.Description
'集合
GetProperties strPackageName, dtsTask.Properties, xmlDocument, xmlTask.appendChild (xmlDocument.createElement ("Properties"))
如果 dtsTask.CustomTaskID = "DTSDataPumpTask" 那么
GetOLEDBProperties strPackageName, dtsTask.CustomTask.SourceCommandProperties, xmlDocument, xmlTask.appendChild (xmlDocument.createElement ("SourceCommandProperties"))
GetOLEDBProperties strPackageName, dtsTask.CustomTask.DestinationCommandProperties, xmlDocument, xmlTask.appendChild (xmlDocument.createElement ("DestinationCommandProperties"))
GetColumns strPackageName, dtsTask.CustomTask.DestinationColumnDefinitions, xmlDocument, xmlTask.appendChild (xmlDocument.createElement ("DestinationColumnDefinitions"))
GetLookups strPackageName, dtsTask.CustomTask.Lookups, xmlDocument, xmlTask.appendChild (xmlDocument.createElement ("Lookups"))
GetTransformations strPackageName, dtsTask.CustomTask.Transformations, xmlDocument, xmlTask.appendChild (xmlDocument.createElement ("Transformations"))
万一
下一个
结束子
子 FormatXML(xmlDocument、xmlElement、intIndent)
暗淡 xmlSubElement
对于 xmlElement.selectNodes ("*") 中的每个 xmlSubElement
xmlElement.insertBefore xmlDocument.createTextNode (vbCrLf & String (intIndent + 1, vbTab)), xmlSubElement
FormatXML xmlDocument、xmlSubElement、intIndent + 1
下一个
如果 xmlElement.selectNodes ("*").length > 0 那么
xmlElement.appendChild xmlDocument.createTextNode (vbCrLf & String (intIndent, vbTab))
万一
结束子
子 GetPackage (strServerName, strPackageName)
调暗 dtsPackage2
设置 dtsPackage2 = CreateObject ("DTS.Package2")
暗淡 DTSSQLStgFlag_Default
暗淡 DTSSQLStgFlag_UseTrustedConnection
DTSSQLStgFlag_Default = 0
DTSSQLStgFlag_UseTrustedConnection = 256
出错时继续下一步
dtsPackage2.LoadFromSQLServer strServerName, , , DTSSQLStgFlag_UseTrustedConnection, , , , strPackageName
如果 Err.Number = 0 那么
出错时转到 0
'fsoTextStream.WriteLine dtsPackage2.Name
暗淡xml文档
设置 xmlDocument = CreateObject ("Msxml2.DOMDocument.3.0")
暗淡xmlPackage2
设置 xmlPackage2 = xmlDocument.appendChild (xmlDocument.createElement ("Package2"))
'特性
xmlPackage2.setAttribute "名称", dtsPackage2.Name
'集合
GetProperties strPackageName, dtsPackage2.Properties, xmlDocument, xmlPackage2.appendChild (xmlDocument.createElement("Properties"))
GetConnections strPackageName, dtsPackage2.Connections, xmlDocument, xmlPackage2.appendChild (xmlDocument.createElement ("Connections"))
GetGlobalVariables strPackageName, dtsPackage2.GlobalVariables, xmlDocument, xmlPackage2.appendChild (xmlDocument.createElement ("GlobalVariables"))
'SavedPackageInfos 仅适用于结构化存储文件中保存的 DTS 包
'GetSavedPackageInfos strPackageName, dtsPackage2.SavedPackageInfos, xmlDocument, xmlPackage2.appendChild (xmlDocument.createElement ("SavedPackageInfos"))
GetSteps strPackageName, dtsPackage2.Steps, xmlDocument, xmlPackage2.appendChild (xmlDocument.createElement ("Steps"))
GetTasks strPackageName, dtsPackage2.Tasks, xmlDocument, xmlPackage2.appendChild (xmlDocument.createElement ("Tasks"))
FormatXML xmlDocument, xmlPackage2, 0
xmlDocument.save strPackageName + ".xml"
别的
MsgBox Err.Description, , strPackageName
出错时转到 0
万一
结束子
子主
暗淡 strServerName
strServerName = Trim (InputBox ("Server:"))
如果 strServerName "" 那么
昏暗 cnSQLServer
设置 cnSQLServer = CreateObject ("ADODB.Connection")
cnSQLServer.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=msdb;Data Source="&strServerName
Dim rsDTS包
设置 rsDTSPackages = cnSQLServer.Execute ("SELECT DISTINCT name FROM sysdtspackages ORDER BY name")
暗淡 strPackageNames
不做 rsDTSPackages.EOF
GetPackage strServerName,rsDTSPackages(“名称”)
rsDTSPackages.MoveNext
环形
rsDTSPackages.关闭
设置 rsDTSPackages = 无
cnSQLServer.关闭
设置 cnSQLServer = 无
暗淡 strCustomTaskIDs
暗淡 strCustomTaskID
MsgBox "完成", , "GetPackages.vbs"
万一
结束子
主要的
于 2008-09-29T22:13:42.963 回答
0
为了完整起见,我启动了另一个 VBS 脚本来读取由 GetPackages.vbs 生成的 XML 文件,并将其作为 DTS 包保存在另一个 SQL Server 上。这更不完整,但我希望它最终会有用。
PushPackages.vbs
选项显式
子集属性(dtsProperties、xmlProperties)
暗淡的 xml 属性
对于 xmlProperties.selectNodes 中的每个 xmlProperty ("Property[@Set='-1']")
dtsProperties.Item (xmlProperty.getAttribute ("Name")).Value = xmlProperty.getAttribute ("Value")
下一个
结束子
子集OLEDBProperties(dtsOLEDBProperties、xmlOLEDBProperties)
暗淡的 xmlOLEDB 属性
对于 xmlOLEDBProperties.selectNodes ("OLEDBProperty") 中的每个 xmlOLEDBProperty
dtsOLEDBProperties.Item (xmlOLEDBProperty.getAttribute ("Name")).Value = xmlOLEDBProperty.getAttribute ("Value")
下一个
结束子
子集连接(dtsConnections、xmlConnections)
暗淡 dtsConnection2
昏暗的xmlConnection2
对于 xmlConnections.selectNodes ("Connection2") 中的每个 xmlConnection2
设置 dtsConnection2 = dtsConnections.New (xmlConnection2.getAttribute ("ProviderID"))
SetProperties dtsConnection2.Properties,xmlConnection2.selectSingleNode(“属性”)
SetOLEDBProperties dtsConnection2.ConnectionProperties, xmlConnection2.selectSingleNode ("ConnectionProperties")
dtsConnections.Add dtsConnection2
下一个
结束子
子集全局变量(dtsGlobalVariables、xmlGlobalVariables)
昏暗的 xmlGlobalVariable2
对于 xmlGlobalVariables.selectNodes ("GlobalVariable2") 中的每个 xmlGlobalVariable2
dtsGlobalVariables.AddGlobalVariable xmlGlobalVariable2.getAttribute(“名称”),xmlGlobalVariable2.getAttribute(“值”)
下一个
结束子
子集PrecedenceConstraints (dtsPrecedenceConstraints, xmlPrecedenceConstraints)
暗淡的xmlPrecedenceConstraint
暗淡 dtsPrecedenceConstraint
对于 xmlPrecedenceConstraints.selectNodes ("PrecedenceConstraint") 中的每个 xmlPrecedenceConstraint
设置 dtsPrecedenceConstraint = dtsPrecedenceConstraints.New (xmlPrecedenceConstraint.getAttribute ("StepName"))
SetProperties dtsPrecedenceConstraint.Properties,xmlPrecedenceConstraint.selectSingleNode(“属性”)
dtsPrecedenceConstraints.Add dtsPrecedenceConstraint
下一个
结束子
子集步骤(dtsSteps,xmlSteps)
昏暗的xmlStep2
暗淡 dtsStep2
对于 xmlSteps.selectNodes ("Step2") 中的每个 xmlStep2
设置 dtsStep2 = dtsSteps.New
SetProperties dtsStep2.Properties,xmlStep2.selectSingleNode(“属性”)
dtsSteps.添加 dtsStep2
下一个
对于 xmlSteps.selectNodes ("Step2") 中的每个 xmlStep2
设置 dtsStep2 = dtsSteps.Item (xmlStep2.getAttribute ("Name"))
SetPrecedenceConstraints dtsStep2.PrecedenceConstraints, xmlStep2.selectSingleNode ("PrecedenceConstraints")
下一个
结束子
子集任务(dtsTasks、xmlTasks)
暗淡的xmlTask
暗淡 dtsTask
对于 xmlTasks.selectNodes ("Task") 中的每个 xmlTask
设置 dtsTask = dtsTasks.New (xmlTask.getAttribute ("CustomTaskID"))
SetProperties dtsTask.Properties,xmlTask.selectSingleNode(“属性”)
dtsTasks.Add dtsTask
下一个
结束子
子 CreatePackage (strServerName, strFileName)
暗淡 fsoFileSystem
设置 fsoFileSystem = CreateObject ("Scripting.FileSystemObject")
调暗 dtsPackage2
设置 dtsPackage2 = CreateObject ("DTS.Package2")
暗淡 DTSSQLStgFlag_Default
暗淡 DTSSQLStgFlag_UseTrustedConnection
DTSSQLStgFlag_Default = 0
DTSSQLStgFlag_UseTrustedConnection = 256
暗淡xml文档
设置 xmlDocument = CreateObject ("Msxml2.DOMDocument.3.0")
xmlDocument.load strFileName
暗淡xmlPackage2
设置 xmlPackage2 = xmlDocument.selectSingleNode ("Package2")
'特性
SetProperties dtsPackage2.Properties,xmlPackage2.selectSingleNode(“属性”)
'集合
SetConnections dtsPackage2.Connections,xmlPackage2.selectSingleNode(“连接”)
SetGlobalVariables dtsPackage2.GlobalVariables, xmlPackage2.selectSingleNode ("GlobalVariables")
SetSteps dtsPackage2.Steps,xmlPackage2.selectSingleNode(“步骤”)
SetTasks dtsPackage2.Tasks,xmlPackage2.selectSingleNode(“任务”)
出错时继续下一步
dtsPackage2.SaveToSQLServer strServerName, , , DTSSQLStgFlag_UseTrustedConnection
If Err.Number Then
MsgBox Err.Description
万一
结束子
子主
暗淡 strServerName
暗淡的 strFileName
如果 WScript.Arguments.Count 2 则
MsgBox "用法:PushPackages 服务器名文件名"
别的
strServerName = WScript.Arguments (0)
strFileName = WScript.Arguments (1)
CreatePackage strServerName, strFileName
万一
结束子
主要的
于 2008-09-29T22:20:29.203 回答
0
这个工具 ( DTSDoc ) 在记录 DTS 包方面做得很好。它可以从命令行运行,这对于保持文档的最新状态非常有用。它有一些正面评价:
于 2008-10-20T11:09:54.430 回答
0
您可以尝试使用系统表 sysdtspackages,如 sqldts.com 在Transfering DTS Packages中的演示。
此外,在新版本激增之前,曾经有许多工具可用于 MS SQL 2000。我在 Red Gate Labs 找到了一个名为DTS Package Compare的免费下载。
于 2008-09-18T02:00:13.553 回答