1

スクリプトタスクに接続されたSQL実行タスクでSSISパッケージを使用しています。SQL実行タスクの値は変数に格納され、スクリプトタスクでは次のコードを使用してXMLファイルを作成します。

Public Sub Main()
    If My.Computer.FileSystem.FileExists("C:\SAMPLE.xml") Then
        Dts.TaskResult = ScriptResults.Failure
    Else
        My.Computer.FileSystem.WriteAllText("C:\SAMPLE.xml", Dts.Variables(0).Value.ToString, False)
        Dts.TaskResult = ScriptResults.Success
        ''
    End If
End Sub    

XMLへのパスをハードコーディングしたくありません。そこで、パッケージをスコープとして、2つの新しい変数FileNameとFilePathを作成しました。VB.Netコードを編集して、これら2つの変数を実際に使用するにはどうすればよいですか。これを試しましたが、機能しませんでした。

    Sub Main()
    If My.Computer.FileSystem.FileExists(Dts.Variables("FileDest").Value.ToString())        Else
        My.Computer.FileSystem.WriteAllText(Dts.Variables("FileDest").Value.ToString(), Dts.Variables(0).Value.ToString, False)Dts.TaskResult = ScriptResults.Success
   ''
    End If
End Sub

理想的には、名前とパスに2つの変数を使用したいのですが、両方を組み合わせた1つの変数で試したところ、機能しませんでした。

4

1 に答える 1

4

あなたの問題の一部は、Variablesコレクションに数値インデックスを使用していることだと思います。変数を追加した後はFileDest、SQL実行タスクの結果を格納するために使用されていた変数がコレクション内のゼロ番目の変数であるという保証はありません。

Execute SQL Taskの結果を含む変数に名前が付けられているとするとXmlQueryResults、次のようにトリックを実行する必要があります。

Public Sub Main()
    Dim filePath As String = Dts.Variables("FileDest").Value
    Dim xmlToWrite As String = Dts.Variables("XmlQueryResults").Value
    If My.Computer.FileSystem.FileExists(filePath) Then
        Dts.TaskResult = ScriptResults.Failure
    Else
        My.Computer.FileSystem.WriteAllText(filePath, xmlToWrite, False)
        Dts.TaskResult = ScriptResults.Success
    End If
End Sub

FileDest(スクリプトタスクエディターの[スクリプト]タブのReadOnlyVariablesに変数を追加することを忘れないでください。)

于 2012-11-15T23:41:54.123 に答える