0

私は単純なタスクであるべきものを持っています-SQL実行タスクからResultSetを使用してユーザー変数を設定します

SELECT MainID FROM TableA WHERE TableA_ID = 1` 

(これは、1 つの列と 1 つの行のみを返します)。

MainID は現在、ユーザー定義のデータ型としてデータベースに格納されています。値は XXXX.Y の形式で保存されます (例: 8008.1)。

UserVariable を String データ型に変更すると、ResultSet を STRING/NUMERIC/FLOAT にキャストまたは変換しても問題なく値を割り当てることができます。

SELECT CAST(MainID as NUMERIC(9,1)) as 'MainID' FROM TableA WHERE TableA_ID = 1;
SELECT CAST(MainID as FLOAT) as 'MainID' FROM TableA WHERE TableA_ID = 1;
SELECT CAST(MainID as VARCHAR(10)) as 'MainID' FROM TableA WHERE TableA_ID = 1;

また

SELECT CONVERT(NUMERIC(9,1), MainID) as 'MainID' FROM TableA WHERE TableA_ID = 1;
SELECT CONVERT(FLOAT, MainID) as 'MainID' FROM TableA WHERE TableA_ID = 1;
SELECT CONVERT(VARCHAR(10), MainID) as 'MainID' FROM TableA WHERE TableA_ID = 1;

ただし、ユーザー変数のデータ型が DOUBLE の場合、値を割り当てることができません。次のエラー メッセージが表示されます。

[SQL タスクの実行] エラー: 変数 "dUserVariable" への値の割り当て中にエラーが発生しました: "変数 "User::dUserVariable" に割り当てられている値の型は、現在の変数の型と異なります。実行中に変数の型が変更されない可能性があります. 変数の型は厳密ですが、Object 型の変数は例外です。".

私はSSISにかなり慣れていないので、この変換を行う方法に少し困惑しています。

何か案は?

4

1 に答える 1

2

次のオプションが Web サービス タスクで機能するかどうかはわかりませんが、試してみてください。

あなたが説明した問題は、 data type の SSIS パッケージ変数に数値を割り当てる際の SSIS の制限によるものだと思いますDouble。この問題が報告されている MSDN Connect へのこのリンクを参照してください。

以下は、試すことができるオプションを示す簡単なステップバイステップの例です。この例は で作成されましたSSIS 2008 R2

SSIS パッケージを作成します。最初にYYYYMMDD_hhmmの形式でパッケージに名前を付けました.SOはスタックオーバーフローを表し、その後にSO質問ID、最後に説明が続きます. これは後で簡単に参照できるようにするためです。スクリーンショット#1を参照してください。

StringValueパッケージで、とという 2 つの変数を作成しますDoubleValue。変数StringValueを数値 (たとえば0 ) に設定します。これは、変数 DoubleValue で構成しようとしている式がエラーにならないようにするために必要です。変数DouleValueを選択し、 F4を押してプロパティを表示します。プロパティEvaluateAsExpressionTrueに設定し、Expressionプロパティを に設定します(DT_DECIMAL, 2) @[User::StringValue] NOTE:。この時点で、変数 DoubleValue のデータ型がCell is not a string に変わります。スクリーンショット#2#3を参照してください。

パッケージで、SQL Server データベースへの OLE DB 接続マネージャーを作成します。ローカル マシンにある Adventure Works データベースへの接続を作成しました。スクリーンショット#4を参照してください。

[制御フロー] タブで、スクリーンショット#5#6Execute SQL Taskに示すように を配置して構成します。[SQL 実行タスク] をダブルクリックして、[SQL 実行タスク エディター] を表示します。取得する値は 1 つだけなので、ResultSet を に設定します。接続文字列を OLE DB 接続マネージャーに設定します。SQL ステートメントは に設定する必要があります。結果セットは変数に設定する必要があります。SingleRowSELECT CAST('3.14' AS NUMERIC(10,2)) AS ValueOfPiStringValue

[制御フロー] タブで、Script TaskSQL 実行タスクの後に a を配置します。このスクリプト タスクは、構成した式によってDoubleValue変数に割り当てられる値を表示するだけです。スクリプト タスクをダブルクリックして、スクリプト タスク エディターを表示します。[スクリプトの編集... ] ボタンをクリックして、VSTA エディタを表示します。Main() メソッドを、スクリプト タスク コード セクションにあるコードに置き換えます。スクリーンショット#7#8を参照してください。

パッケージを実行します。変数DoubleValueの値がメッセージ ボックスに表示されます。スクリーンショット#9を参照してください。

それが役立つことを願っています。

スクリプト タスク コード:

でのみ使用できるC#SSIS 2008 and aboveコード。

public void Main()
{
    Variables varCollection = null;
    Dts.VariableDispenser.LockForWrite("User::DoubleValue");
    Dts.VariableDispenser.GetVariables(ref varCollection);

    MessageBox.Show(varCollection["User::DoubleValue"].Value.ToString());

    Dts.TaskResult = (int)ScriptResults.Success;
}

スクリーンショット:

#1:

1

#2:

2

#3:

3

#4:

4

#5:

5

#6:

6

#7:

7

#8:

8

#9:

9

于 2011-07-27T15:42:59.810 に答える