個々の 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 パッケージの文書化に適しています。コマンドラインから実行できるため、ドキュメントを最新の状態に保つことができます。いくつかの肯定的なレビューがあります。