2012-05-03 39 views
3

OK ...比較的シンプルなSSISパッケージ(DTSDesigner100、Visual Studio 2008バージョン9.0.30729.4462 QFE、 .NET Framework 3.5 SP1)。パッケージのSSIS制御フローの最後に、ファイルシステムタスクがあります。ファイル名を変更操作です。次のようにこのファイルシステムタスクのSSISファイルシステムタスクエラー:変数に割り当てられている値のタイプ...現在の変数タイプと異なる

プロパティは次のとおりです。

  • IsDetinationPathVariable:真
  • DestinationVariable:ユーザー:: OUTPUTFILENAME
  • OverwriteDestination:真
  • 説明:
  • システムタスクファイル操作:ファイル名の変更
  • IsSourcePathVariable:False
  • SourceConnection:エクセルテンプレートのコピー先

には定義された式ではありません。ご覧のとおり、Destinationには変数User :: OutputFileNameが割り当てられています。それでは、その変数を見てみましょう...

  • 名:OUTPUTFILENAME
  • 範囲:パッケージ
  • データ型(ValueTypeに):文字列
  • 値:
  • ネーム:ユーザー
  • EvaluateAsExpression: True
  • ReadOnly:False

"\\\\SERVER\\Folder\\" + "MyAwesomeExcelWorkbook_" 
+ (DT_WSTR,4)DATEPART("year", GETDATE())+ "-" 
+ RIGHT("0" + (DT_WSTR,2)DATEPART("mm", GETDATE()), 2) + "-" 
+ RIGHT("0" + (DT_WSTR,2)DATEPART("dd", GETDATE()), 2) + "-" 
+ RIGHT("0" + (DT_WSTR,2)DATEPART("hh", GETDATE()), 2) + "-" 
+ RIGHT("0" + (DT_WSTR,2)DATEPART("mi", GETDATE()), 2) + "-" 
+ RIGHT("0" + (DT_WSTR,2)DATEPART("ss", GETDATE()), 2) 
+ ".xlsx" 

この式を正常に評価できます。パッケージが実行され(そして失敗するたびに)、評価された式の値は期待通りです。

私はパッケージを実行すると、ここで何が起こるかだ...

  1. は、前の手順が正常に実行されます。
  2. ファイルシステムタスクが開始され、ファイルの名前が変更されます。

:ファイルシステムタスクは、次のエラーで失敗したので、

  • しかし、パッケージが失敗します。

    Error: 0xC001F009 at Package: The type of the value being assigned to variable "User::OutputFileName" differs from the current variable type. Variables may not change type during execution. Variable types are strict, except for variables of type Object. 
    Task failed: Rename Excel Workbook 
    Error: 0xC0019001 at Rename Excel Workbook: The wrapper was unable to set the value of the variable specified in the ExecutionValueVariable property. 
    Warning: 0x80019002 at Package: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED. The Execution method succeeded, but the number of errors raised (4) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors. 
    SSIS package "Package.dtsx" finished: Failure. 
    

    私はここで忘れているようです。今、私は式全体をDT_WSTR、512としてキャストしようとしましたが、それはちょうど良いと評価されますが、File System Taskは同じエラーで失敗します。

    私が見落としている細部を指摘できる人は誰ですか?前もって感謝します。

  • 答えて

    2

    問題は変数であり、タスクではなくパッケージに適用されます。
    スコープ対象の変数をタスクに変更すると、正常に実行されます。

    編集:私は質問する必要があります - なぜですか?これは正直なところ、SSISについて私が理解していることは気にしません.Denali CTPの導入以来、私はこれを使用してきました。フードの下で何が起こっているのでしょうか?これは、タスクスコープの変数に対しては大変なことですが、ファイルシステムタスクで使用されるのパッケージスコープではありません。?特定のタスクの外には問題はありませんが、特定のタスクで使用するときは問題はありません。どうしたの?

    +0

    これはまったく意味がありません。私は、2つの異なるタスクで使用される変数が必要です。とにかく、あなたの答えをありがとう。私は別の回避策を見つけるのを手伝ってくれました。 – celerno

    0

    SSISパッケージの「余分な」変数を確認したい場合があります。パッケージスコープの変数は、タスクで使用できる必要があります。 Variablesウィンドウを開き、 "Show All Variables"ウィンドウをクリックして、異なるスコープで2つの変数がOutputFileNameという名前になっているかどうかを確認します。

    Show All Variables

    変数はSSIS、低い範囲での変数に名前によって識別されるので - ファイルシステムタスクを含む配列コンテナを言う - パッケージスコープ変数の意志有効インターセプト可変識別場合両方の変数は、同じ名前が付けられます。このことができます

    Multiple Variables of the same name

    希望、 アンディ

    +1

    この場合は該当しません。 –

    0

    私はいくつかの情報を追加したいと思っています。これは私の現在の問題に最も近い記述であり、うまくいけば他の誰かを助けるでしょう。パラメータ化されたSQLタスクからレコードセットオブジェクトをロードしています。その後、recorsetの各ループに対してaを使用し、フィールドを変数にロードします。

    私は上記のエラーを、それぞれのループに対してロードしていた変数の1つに対して受け取りました。

    より前に SQLタスクがレコードセットにデータを入力したときに問題が解決しました。

    SELECT COL1, COL2 FROM Table WHERE COL2 = ? OR ? = '' 
    

    (又は)

    SELECT COL1, COL2 FROM Table WHERE COL2 = ? OR ? = N'' 
    

    を、これが停止:各ループのための後続で変数にCOL2をロードするとき

    すなわち前SQLタスクでこれを使用する場合には、エラーの原因エラーが発生しました:

    SELECT COL1, COL2 FROM Table WHERE COL2 = ? 
    

    パラメータ機能はSSISでは残念です。

    • は、選択部分
    • でパラメータを置くことができないパラメータ
    • 周り変換関数をラップすることはできません見てする必要がありますUDFのか、かなりの複雑さの任意のクエリ
    • 内のパラメータを使用することはできませんドライバに依存する秘密のパラメータコード(OLEDB/ADO。
    • 上記のエラーから、パラメータのフィールドを使用すると、クエリからのフィールド出力のメタデータに何らかの影響があるように見えます。
    0

    次の例外が発生しています。私はそれを解決しました。 問題を解決するために私が解決した問題と手順について説明します。

    **Error Message :** The type of the value being assigned to 
    variable differs from the current variable type.. 
    
    
    
           **When :** Executing SSIS package. SSIS package is calling batch script. 
         Batch script is calling Python script. SSIS package is expecting output from 
        batch file. After executing the batch file and python script output 
    should be delivered to SSIS package. But Here I am getting the exception. 
    
        **Python Script writing output into stdout :** 
        //Python code start 
        print >>sys.stdout, "output" 
        //Python code End 
        So here the output is written to standard out. 
    
         **Issue :** When I am calling the batch file, I am writing the log 
    into one log file. 
        Please check the following batch script. 
        //Batch File script start 
        C:\Python25\python.exe GetValFromPYthonSCript.py > scriptLog.txt 
        //Batch File script End 
         So what happend is, the output is written in the log.But again 
    I tried to read the output using the following line in SSIS. 
        //SSIS coding start 
        Dim objProcess As Process 
        objProcess = New Process() 
        objProcess.StartInfo.FileName = "batchFile location" 
        objProcess.start() 
        System.Windows.Forms.MessageBox.Show(objProcess.StandardOutput.ReadLine()) 
        //SSIS coding End 
    
        So when I am trying to display I am getting the above exception. 
    
        **Fix** : Just I have removed the log. I did not write the output into the log file. 
        C:\Python25\python.exe GetValFromPYthonSCript.py 
        Now I am getting the output properly. 
    
    4

    同じエラーが発生しました。 SSISパッケージ変数を設定するために使用されていたストアドプロシージャを実行するために、「Execute SQL Task」を使用していました。ストアドプロシージャの変数は "varchar(max)"と宣言されており、それらを "文字列"として定義されたパッケージレベル変数に割り当てていました。

    私はストアドプロシージャの宣言をvarchar(512)と "VOILA"に変更しようとしました...エラーはこれ以上ありません。実際には... varchar(8000)とnvarchar(4000)でも動作しましたが、SSIS no likey varchar(max)です。

    関連する問題