3

個々の DTS パッケージを編集して Visual Basic スクリプトとして保存できることはわかっていますが、サーバー上に何百ものパッケージがあるため、それには時間がかかります。それらすべてを一度にスクリプト化するにはどうすればよいですか? パッケージごとに 1 つのファイルを作成して、ソース管理にチェックインしたり、検索して特定のテーブルを参照しているファイルを確認したり、開発サーバーのパッケージと運用サーバーのパッケージを比較したりできるようにしたいと考えています。

4

4 に答える 4

2

最終的に、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、xmlTask​​s)
    Dim dtsTask

    dtsTasks 内の各 dtsTask について
        Dim xmlTask
        xmlTask​​ = xmlTask​​s.insertBefore ( _ を設定します。
            xmlDocument.createElement ("タスク"), _
            xmlTask​​s.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」
    終了条件
サブ終了

主要
于 2008-09-29T22:13:42.963 に答える
0

DTS パッケージの転送の sqldts.com で説明されているように、システム テーブル sysdtspackages を操作してみてください。
また、新しいバージョンが普及する前は、MS SQL 2000 で使用できるツールが多数ありました。DTS Package Compareと呼ばれるものを、Red Gate Labs で無料でダウンロードできるものを見つけました。

于 2008-09-18T02:00:13.553 に答える
0

完全を期すために、別の 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、xmlTask​​s)
    暗い xmlTask
    薄暗いdtsTask

    For Each xmlTask​​ in xmlTask​​s.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
    終了条件
サブ終了

主要
于 2008-09-29T22:20:29.203 に答える
0

このツール ( DTSDoc ) は、DTS パッケージの文書化に適しています。コマンドラインから実行できるため、ドキュメントを最新の状態に保つことができます。いくつかの肯定的なレビューがあります。

ASPアライアンスによるレビュー

Mike Gunderloy によるレビュー (LARKWARE)

于 2008-10-20T11:09:54.430 に答える