2

SSIS 経由で Excel ファイルを SQL-Server にインポートします。nvarchar ですべてを取得するための一時テーブルがあります。次に、4 つの列について、文字列を money 型にキャストし、ターゲット テーブルに配置します。

私の一時テーブルでは、これらの 4 つの列の 1 つを X と呼びましょう。X には区切り文字としてカンマがあり、残りにはドットがあります。理由を聞かないでください。SSIS セットのすべてが同じに設定されています。私のExcelでは、区切り文字もコンマです。

したがって、ターゲットテーブルにはすべてがコンマ値になっていますが、X 列はコンマを右に 2 つ移動し、次のようになります。

5370,13の代わりに537013,00。これは、temp および Excel 列の元のセル値です。

これはカルチャのセットアップの問題だと思っていましたが、これらの列のすべてで機能する必要があるかどうかはわかりません。

a) Excel でカンマが表示されているときに、一時テーブルにドット値が表示されるのはなぜですか?

b) どうすればこれを修正できますか? 一時テーブルの「,」をドットに置き換えることはできますか?

アップデート

理由はわかったが解決策は見つからなかったと思う:

Excel のこの X 列では、最初の 3 つのセルは空です。他の 3 つの列はすべて 0 で始まります。X のこれら 3 つのセルを 0 で埋めると、一時テーブルにドットが表示され、ターゲット テーブルに正しい値が表示されます。 . もちろん、エクセルファイルをそのまま使わなければなりません。それに関するアイデアはありますか?

4

3 に答える 3

0

それはExcelの長年の問題です。最初の30行程度を使用してデータ型を推測します。それは無限の問題につながる可能性があります。あなたの解決策は、Yaroslavが提案した方法ですべてを文字列として処理するか、データを事前定義してフォーマットされたデータ型の列を含むExcelテンプレートを提供し、値を挿入する必要があると思います。そのピタ。

于 2012-09-08T11:12:13.363 に答える
0

まず、SQL の「セパレータ」は小数点です。コンマを使用している唯一の Excel です。Excel で書式設定を変更できます。Excel 列を通貨として書式設定し、区切り記号として小数点を指定する必要があります。次に、SSIS インポート ウィザードで、列の変換を分割して、money データ型にインポートします。それは文化的なものですが、区切り文字は、ある列の終わりと次の列の開始を示すコンテキストで使用される傾向があります (csv のように)

HTH

于 2012-09-07T10:46:09.403 に答える
0

以下のコードを試してください。金額に変換される文字列値が数値データ型かどうかをチェックします。文字列値が数値データ型の場合は、金額データ型に変換します。それ以外の場合は NULL 値を返します。また、文字列値の小数点記号と桁区切り記号を置き換えて、SQL Server の予想される小数点記号と桁区切り記号に一致させます。

DECLARE @MoneyString VARCHAR(20)
SET @MoneyString = '$ 1.000,00'
SET @MoneyString = REPLACE(REPLACE(@MoneyString, '.', ''), ',', '.')
SELECT CAST(CASE WHEN ISNUMERIC(@MoneyString) = 1
                 THEN @MoneyString
                 ELSE NULL END AS MONEY)

ドットの代わりにコンマを取得する理由については、私にはわかりません。私の最初の推測は文化的設定ですが、あなたはすでにそれをチェックしています. グーグルについてはどうですか、結果は得られましたか?

于 2012-09-07T10:43:32.680 に答える