2017-11-02 4 views
1

SQL実行タスクを実行して行数を取得し、変数に格納した後、スクリプトタスクを使用してSSISパッケージでその変数を読み取り、それより大きいかどうかを確認します0SSISでクエリ結果を変数に渡す

私が問題を抱えているのは、パッケージをデバッグすると-1に変数が読み込まれているということです(これは、クエリが正常に実行されたというSQLだと仮定しています)。 DB。 私が言うことができる限り、すべてが正しく設定され、正しい方法でコード化されているので、何が原因か分かりません。

SQL実行タスクの設定:スクリプトタスクから enter image description here enter image description here

コード: enter image description here

private byte[] emptyBytes = new byte[0]; 

    public void Main() 
    { 
     int rowCount = Convert.ToInt32(Dts.Variables["User::SMART_rowcount"].Value.ToString()); 

     if (rowCount > 0) 
     { 
      Dts.TaskResult = (int)ScriptResults.Success; 
     } 
     else 
     { 
      Dts.Log("The SMART Row Count Check has failed due to result set having no rows. Check table SMART.[SMART_SEC_MGMT_QUOTE_DATA].", (int)Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure, emptyBytes); 
      Dts.TaskResult = (int)ScriptResults.Failure; 
     } 
    } 

編集:ここでは

はこれらと目の流れでありますE変数:あなたのSQL実行タスクのResultSetタブで

enter image description here enter image description here

+0

あなたは物事を整理するために、これら2つのタスクとパッケージの変数を含む画面でフローの画面を追加できますか? –

+0

@VladimirSemashkin彼らは今追加されました –

答えて

1

私はすべてが正しく設定されていて、プロセスに問題はありませんでした。このエラーを解決するには、SQL実行タスクを削除し、まったく同じ設定とすべてを再作成して、正しい結果を返すようにしました。

「もう一度電源を入れ直してみましたか?

1

、あなたは「結果名」列で列の名前を入れてはいけません。列の0から始まるインデックスを置きます。

したがって、Result Nameの下に「Smart_Count」を表示する代わりに、「0」を設定する必要があります。

+0

私は0、 "0"、[0]を使用しようとしましたが、0ベースのインデックスを示す試みは私に別の結果をもたらしませんでした。私はまだ変数の中に-1を見続けています –

1

私はこれにスクリプトタスクを使用せず、代わりにコントロールフローに式を入れます。

メインパス上の@Smart_rowcount> 0。 および @Smart_rount <ログ・パス上の1。

+0

スクリプトタスクはここで壊れているものではありません。私はそれを使って詳細なカスタムロギングを行うことができます。問題は、Execute SQLタスクがCOUNT文の結果ではなく、変数に合格/不合格インジケータを格納していることです –

関連する問題