2

SSIS パッケージを使用して SQL Server 2008 にインポートするフラット ファイルがあります。

このファイルには、数値を含むフィールドが含まれており、前の列の値が負の場合は負符号の列が続きます。

例えば:

Price    Sign
-----    -----
9212.00 
  29.01    -
 268.00    -
 453.02

この値をテーブルの 10 進列にロードしたいと考えています。

これを実現するために、データ フロー タスクで派生列を作成しています。派生列の式は です[Sign] + [Price]。(詳細エディターを使用して) 派生列を decimal 型として定義しました[DT_DECIMAL]

次に、データを (派生列と共に) テーブルにロードするだけです。

これは、この状況を処理するための良い方法のように聞こえますか? 代わりに検討すべき別の方法はありますか?この方法を使用する際の「落とし穴」はありますか?

ありがとう。

4

2 に答える 2

2

あなたのアプローチは最良の選択肢のようです。フラット ファイルの各列のデフォルトのデータ型は文字列です。したがって、[Sign] + [Price]式は文字列連結を行っています。また、出力列に移動すると、データは暗黙的に 10 進数値に変換されます。

読みやすさを向上させる 1 つの変更は、文字列値を明示的に 10 進数にキャストすることです。派生列コンポーネントの式を次のように変更できます。

(DT_DECIMAL, scale)[Sign] + [Price]

ここscaleで、出力列のデータ型に一致する数値です。

この変更により、派生列コンポーネントからの出力は decimal データ型になります。

于 2013-01-07T14:53:08.327 に答える
1

多分これはうまくいかないでしょう...

  1. Sign文字列データ型とPrice数値に変換する必要があります。
  2. Sign次に、 である場合、 である場合は"-"からの複数を比較し-1ます。

派生列コードの例:

(DT_WSTR, 1) [Sign]=="-"?  [Price]*-1 :  [Price]

ここに画像の説明を入力

于 2013-01-04T20:22:13.973 に答える