個々の DTS パッケージを編集して Visual Basic スクリプトとして保存できることはわかっていますが、サーバー上に何百ものパッケージがあるため、それには時間がかかります。それらすべてを一度にスクリプト化するにはどうすればよいですか? パッケージごとに 1 つのファイルを作成して、ソース管理にチェックインしたり、検索して特定のテーブルを参照しているファイルを確認したり、開発サーバーのパッケージと運用サーバーのパッケージを比較したりできるようにしたいと考えています。
4 に答える
最終的に、SQL 2000 のドキュメント (Building SQL Server Applications / DTS Programming / Programming DTS Applications / DTS Object Model) を掘り下げ、パッケージを読み取って XML ファイルを書き込むための VBS スクリプトを作成しました。これは完全ではなく、いくつかの方法で改善できる可能性がありますが、大きなスタートです。
GetPackages.vbs
オプション明示 サブ GetProperties (strPackageName、dtsProperties、xmlDocument、xmlProperties) Dim dtsProperty If Not dtsProperties Is Nothing Then dtsProperties 内の各 dtsProperty について If dtsProperty.Set Then Dim xmlProperty xmlProperty = xmlProperties.insertBefore ( _ を設定します。 xmlDocument.createElement ("プロパティ"), _ xmlProperties.selectSingleNode ("Property[@Name > '" & dtsProperty.Name & "']")) 'プロパティ 'xmlProperty.setAttribute "Get"、dtsProperty.Get 'xmlProperty.setAttribute "セット"、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 ("プロパティ")) 終了条件 次 終了条件 サブ終了 サブ GetOLEDBProperties (strPackageName、dtsOLEDBProperties、xmlDocument、xmlOLEDBProperties) Dim dtsOLEDBProperty dtsOLEDBProperties 内の各 dtsOLEDBProperty について dtsOLEDBProperty.IsDefaultValue = 0 の場合 Dim xmlOLEDBProperty 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 ("プロパティ")) 終了条件 次 サブ終了 サブ GetConnections (strPackageName、dtsConnections、xmlDocument、xmlConnections) Dim dtsConnection2 dtsConnections 内の各 dtsConnection2 について Dim xmlConnection2 xmlConnection2 = xmlConnections.insertBefore ( _ を設定します。 xmlDocument.createElement ("接続 2")、_ 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 ("プロパティ")) Dim dtsOLEDBProperties エラー時再開次へ dtsOLEDBProperties = dtsConnection2.ConnectionProperties を設定します。 エラー番号 = 0 の場合 エラー時 0 に移動 GetOLEDBProperties strPackageName、dtsOLEDBProperties、xmlDocument、xmlConnection2.appendChild (xmlDocument.createElement ("ConnectionProperties")) そうしないと MsgBox Err.Description & vbCrLf & "ProviderID: " & dtsConnection2.ProviderID & vbCrLf & "接続名: " & dtsConnection2.Name, , strPackageName エラー時 0 に移動 終了条件 次 サブ終了 Sub GetGlobalVariables (strPackageName、dtsGlobalVariables、xmlDocument、xmlGlobalVariables) Dim dtsGlobalVariable2 dtsGlobalVariables 内の各 dtsGlobalVariable2 について Dim 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 "値"、dtsGlobalVariable2.Value 終了条件 '拡張プロパティなし 'コレクション 'GetProperties strPackageName, dtsGlobalVariable2.Properties, xmlDocument, xmlGlobalVariable2.appendChild (xmlDocument.createElement ("プロパティ")) 次 サブ終了 サブ GetSavedPackageInfos (strPackageName、dtsSavedPackageInfos、xmlDocument、xmlSavedPackageInfos) Dim dtsSavedPackageInfo dtsSavedPackageInfos 内の各 dtsSavedPackageInfo について Dim 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 "パッケージ名"、dtsSavedPackageInfo.パッケージ名 xmlSavedPackageInfo.setAttribute "VersionID"、dtsSavedPackageInfo.VersionID xmlSavedPackageInfo.setAttribute "VersionSaveDate"、dtsSavedPackageInfo.VersionSaveDate 次 サブ終了 サブ GetPrecedenceConstraints (strPackageName、dtsPrecedenceConstraints、xmlDocument、xmlPrecedenceConstraints) Dim dtsPrecedenceConstraint dtsPrecedenceConstraints 内の各 dtsPrecedenceConstraint Dim 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 ("プロパティ")) 次 サブ終了 サブ GetSteps (strPackageName、dtsSteps、xmlDocument、xmlSteps) Dim dtsStep2 dtsSteps 内の各 dtsStep2 について Dim xmlStep2 xmlStep2 = xmlSteps.insertBefore ( _ を設定します。 xmlDocument.createElement ("Step2"), _ xmlSteps.selectSingleNode ("Step2[@Name > '" & dtsStep2.Name & "']")) 'プロパティ xmlStep2.setAttribute "名前"、dtsStep2.Name xmlStep2.setAttribute "説明"、dtsStep2.説明 'コレクション GetProperties strPackageName、dtsStep2.Properties、xmlDocument、xmlStep2.appendChild (xmlDocument.createElement ("プロパティ")) GetPrecedenceConstraints strPackageName、dtsStep2.PrecedenceConstraints、xmlDocument、xmlStep2.appendChild (xmlDocument.createElement ("PrecedenceConstraints")) 次 サブ終了 サブ GetColumns (strPackageName、dtsColumns、xmlDocument、xmlColumns) Dim dtsColumn dtsColumns 内の各 dtsColumn Dim xmlColumn xmlColumn = xmlColumns.appendChild (xmlDocument.createElement ("列")) を設定します。 GetProperties strPackageName、dtsColumn.Properties、xmlDocument、xmlColumn.appendChild (xmlDocument.createElement ("プロパティ")) 次 サブ終了 サブ GetLookups (strPackageName、dtsLookups、xmlDocument、xmlLookups) Dim dtsLookup For Each dtsLookup in dtsLookups Dim xmlLookup xmlLookup = xmlLookups.appendChild (xmlDocument.createElement ("Lookup")) を設定します。 GetProperties strPackageName、dtsLookup.Properties、xmlDocument、xmlLookup.appendChild (xmlDocument.createElement ("プロパティ")) 次 サブ終了 サブ GetTransformations (strPackageName、dtsTransformations、xmlDocument、xmlTransformations) Dim dts変換 dtsTransformations の For Each dtsTransformation Dim xmlTransformation xmlTransformation = xmlTransformations.appendChild (xmlDocument.createElement ("変換")) を設定します。 GetProperties strPackageName、dtsTransformation.Properties、xmlDocument、xmlTransformation.appendChild (xmlDocument.createElement ("プロパティ")) 次 サブ終了 サブ GetTasks (strPackageName、dtsTasks、xmlDocument、xmlTasks) Dim dtsTask dtsTasks 内の各 dtsTask について Dim xmlTask 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 ("プロパティ")) 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 ("ルックアップ")) GetTransformations strPackageName、dtsTask.CustomTask.Transformations、xmlDocument、xmlTask.appendChild (xmlDocument.createElement ("変換")) 終了条件 次 サブ終了 Sub FormatXML (xmlDocument、xmlElement、intIndent) Dim 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) Dim dtsPackage2 dtsPackage2 = CreateObject ("DTS.Package2") を設定します。 Dim DTSSQLStgFlag_Default Dim DTSSQLStgFlag_UseTrustedConnection DTSSQLStgFlag_Default = 0 DTSSQLStgFlag_UseTrustedConnection = 256 エラー時再開次へ dtsPackage2.LoadFromSQLServer strServerName, , , DTSSQLStgFlag_UseTrustedConnection, , , strPackageName エラー番号 = 0 の場合 エラー時 0 に移動 'fsoTextStream.WriteLine dtsPackage2.Name Dim xmlDocument Set xmlDocument = CreateObject ("Msxml2.DOMDocument.3.0") Dim 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 ("接続")) 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 ("ステップ")) GetTasks strPackageName、dtsPackage2.Tasks、xmlDocument、xmlPackage2.appendChild (xmlDocument.createElement ("タスク")) FormatXML xmlDocument, xmlPackage2, 0 xmlDocument.save strPackageName + ".xml" そうしないと MsgBox Err.Description, , strPackageName エラー時 0 に移動 終了条件 サブ終了 サブメイン Dim strServerName strServerName = Trim (InputBox ("サーバー:")) If strServerName "" Then Dim cnSQLServer cnSQLServer = CreateObject ("ADODB.Connection") を設定します。 cnSQLServer.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=msdb;Data Source=" & strServerName Dim rsDTSPackages Set rsDTSPackages = cnSQLServer.Execute ("SELECT DISTINCT name FROM sysdtspackages ORDER BY name") Dim strPackageNames Do While Not rsDTSPackages.EOF GetPackage strServerName、rsDTSPackages (「名前」) rsDTSPackages.MoveNext ループ rsDTSPackages.Close rsDTSPackages を設定 = なし cnSQLServer.閉じる cnSQLServer を設定 = なし Dim strCustomTaskIDs Dim strCustomTaskID MsgBox「終了しました」、「GetPackages.vbs」 終了条件 サブ終了 主要
DTS パッケージの転送の sqldts.com で説明されているように、システム テーブル sysdtspackages を操作してみてください。
また、新しいバージョンが普及する前は、MS SQL 2000 で使用できるツールが多数ありました。DTS Package Compareと呼ばれるものを、Red Gate Labs で無料でダウンロードできるものを見つけました。
完全を期すために、別の VBS スクリプトを開始して、GetPackages.vbs によって生成された XML ファイルを読み取り、それを DTS パッケージとして別の SQL Server に保存しました。これはさらに完全ではありませんが、最終的に役立つことを願っています。
PushPackages.vbs
オプション明示 サブ セット プロパティ (dtsProperties、xmlProperties) dim xmlProperty For Each xmlProperty in xmlProperties.selectNodes ("Property[@Set='-1']") dtsProperties.Item (xmlProperty.getAttribute ("名前")).Value = xmlProperty.getAttribute ("値") 次 サブ終了 Sub SetOLEDBProperties (dtsOLEDBProperties、xmlOLEDBProperties) dim xmlOLEDBProperty xmlOLEDBProperties.selectNodes の各 xmlOLEDBProperty ("OLEDBProperty") dtsOLEDBProperties.Item (xmlOLEDBProperty.getAttribute ("名前")).Value = xmlOLEDBProperty.getAttribute ("値") 次 サブ終了 サブ SetConnections (dtsConnections、xmlConnections) 暗い dtsConnection2 薄暗いxmlConnection2 xmlConnections.selectNodes ("Connection2") 内の各 xmlConnection2 に対して set dtsConnection2 = dtsConnections.New (xmlConnection2.getAttribute ("ProviderID")) SetProperties dtsConnection2.Properties、xmlConnection2.selectSingleNode (「プロパティ」) SetOLEDBProperties dtsConnection2.ConnectionProperties、xmlConnection2.selectSingleNode ("ConnectionProperties") dtsConnections.Add dtsConnection2 次 サブ終了 Sub SetGlobalVariables (dtsGlobalVariables、xmlGlobalVariables) 薄暗いxmlGlobalVariable2 For Each xmlGlobalVariable2 in xmlGlobalVariables.selectNodes ("GlobalVariable2") dtsGlobalVariables.AddGlobalVariable xmlGlobalVariable2.getAttribute (「名前」)、xmlGlobalVariable2.getAttribute (「値」) 次 サブ終了 Sub SetPrecedenceConstraints (dtsPrecedenceConstraints、xmlPrecedenceConstraints) dim xmlPrecedenceConstraint dim dtsPrecedenceConstraint For Each xmlPrecedenceConstraint in xmlPrecedenceConstraints.selectNodes ("PrecedenceConstraint") set dtsPrecedenceConstraint = dtsPrecedenceConstraints.New (xmlPrecedenceConstraint.getAttribute ("StepName")) SetProperties dtsPrecedenceConstraint.Properties、xmlPrecedenceConstraint.selectSingleNode (「プロパティ」) dtsPrecedenceConstraints.Add dtsPrecedenceConstraint 次 サブ終了 サブ SetSteps (dtsSteps、xmlSteps) 薄暗いxmlStep2 薄暗い dtsStep2 xmlSteps.selectNodes の各 xmlStep2 (「Step2」) dtsStep2 = dtsSteps.New を設定します。 SetProperties dtsStep2.Properties、xmlStep2.selectSingleNode (「プロパティ」) dtsSteps.Add dtsStep2 次 xmlSteps.selectNodes の各 xmlStep2 (「Step2」) set dtsStep2 = dtsSteps.Item (xmlStep2.getAttribute ("名前")) SetPrecedenceConstraints dtsStep2.PrecedenceConstraints、xmlStep2.selectSingleNode ("PrecedenceConstraints") 次 サブ終了 サブ SetTasks (dtsTasks、xmlTasks) 暗い xmlTask 薄暗いdtsTask For Each xmlTask in xmlTasks.selectNodes (「タスク」) set dtsTask = dtsTasks.New (xmlTask.getAttribute ("CustomTaskID")) SetProperties dtsTask.Properties、xmlTask.selectSingleNode (「プロパティ」) dtsTasks.Add dtsTask 次 サブ終了 サブ CreatePackage (strServerName、strFileName) 暗い fsoFileSystem set fsoFileSystem = CreateObject ("Scripting.FileSystemObject") Dim dtsPackage2 dtsPackage2 = CreateObject ("DTS.Package2") を設定します。 Dim DTSSQLStgFlag_Default Dim DTSSQLStgFlag_UseTrustedConnection DTSSQLStgFlag_Default = 0 DTSSQLStgFlag_UseTrustedConnection = 256 Dim xmlDocument Set xmlDocument = CreateObject ("Msxml2.DOMDocument.3.0") xmlDocument.load strFileName Dim xmlPackage2 set 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 終了条件 サブ終了 サブメイン Dim strServerName Dim strFileName If WScript.Arguments.Count 2 Then MsgBox "使用法: PushPackages サーバー名 ファイル名" そうしないと strServerName = WScript.Arguments (0) strFileName = WScript.Arguments (1) CreatePackage strServerName、strFileName 終了条件 サブ終了 主要
このツール ( DTSDoc ) は、DTS パッケージの文書化に適しています。コマンドラインから実行できるため、ドキュメントを最新の状態に保つことができます。いくつかの肯定的なレビューがあります。