2

ここに画像の説明を入力

ssis パッケージの Execute sql タスクに単純な sql クエリがある SELECT MAX(binindex) FROM dbo.myTable

この最大インデックスを変数に格納し、それをスクリプト タスクに渡して表示する必要があります。既にパッケージ変数を宣言しています。パッケージはコンパイルされますが、毎回 -1 が表示されます。何をしているのかわかりません。間違っています、どんな助けでも大歓迎です!

ここに画像の説明を入力

public void Main(){
    //TODO: Add your code here
    Dts.TaskResult = (int)ScriptResults.Success;
    MessageBox.Show(Dts.Variables["User::BININDEX"].Value.ToString());
}

ここに画像の説明を入力

ここに画像の説明を入力

4

1 に答える 1

3

良いニュースは、私が見る限り、あなたはすべてを正しくやっているということです。パッケージを再作成し、クエリから期待値を取得しました。

基本パッケージ

私はあなたの状況を誘発することもできます-正しい値が私のクエリから返されますが、私のパッケージは「間違った結果」を生成します。

ネガティブなもの

問題は、異なるスコープで2つのBININDEX変数が定義されていることです。私の当初の想定では、パッケージスコープのものには-1の値が含まれており、同じ名前の「SQL実行タスク」にスコープされた変数がありました。デフォルトの動作は、現在フォーカスがあるオブジェクトをスコープとして作成された変数です。ちなみに、これはSQLServerの2012リリースで変更されています。

写真はパッケージスコープ変数の設計時の値123を示しているため、スクリプトタスクで同じ名前のBININDEXで変数が定義されている可能性もあります。ローカル変数は、グローバルスコープの変数をオーバーライドします

変数ウィンドウ

スクリプトタスクをクリックすると、上記のようにBININDEXが定義されていることがわかります。そうでなければ、問題はパッケージのどこかにあると思います。BININDEX変数が競合しています。パッケージエクスプローラーを調べて、同じ名前の2つの変数がリストされているインスタンスを探してみてください。

パッケージエクスプローラー

終了する必要がありますが、それが当てはまらない場合は、SQL実行タスクにPostExecuteブレークポイントを追加し、[ローカル]ウィンドウを確認します(設計時の値のみを反映するため、変数ではありません)。変数を展開すると、BININDEXの値が表示されるはずです。そこは正しいですか?

ここに画像の説明を入力してください

于 2012-06-11T22:07:27.343 に答える