我知道我可以编辑每个单独的 DTS 包并将其保存为 Visual Basic 脚本,但是服务器上有数百个包,这将需要很长时间。如何一次编写所有脚本?我希望能够为每个包创建一个文件,以便我可以将它们签入源代码控制,搜索它们以查看哪个引用了特定表,或者将开发服务器上的包与生产服务器上的包进行比较。
Daniel
问问题
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 回答