1

csvファイルから SQL テーブルに一括挿入しようとしています。ただし、私の列の 1 つに科学表記法の数値が含まれています3E-4この列にColumn Xという名前を付けましょう。

  • 最初に列 Xnumeric(18,9)の型でテーブルを作成しようとしましたが、テーブルにデータを一括挿入しようとすると、列 X の型の不一致エラーが発生しました。

  • この投稿が示唆したように、次の代替ソリューションを試しましたvarchar(255)。代わりに、列が の型である別のテーブルを作成しました。この場合、一括挿入に問題はありません。しかし、データを挿入した後、列 Xの列タイプをからに変更しようとしvarchar(255)ましたfloat。これにより、エラーが発生しますError converting datatype varchar to float

この問題に対処する方法がわかりません。Microsoft の Web サイトでは、次のように提案されています。 「この動作を回避するには、フォーマット ファイルを使用して、科学表記法の浮動小数点データを 10 進列に一括インポートします。フォーマット ファイルでは、列を実数または浮動小数点データとして明示的に記述します。」

フォーマットファイルの作り方がわかりません。これがこの問題を回避する唯一の方法ですか? もしそうなら、誰かがフォーマットファイルの使用を手伝ってくれるか、代わりに別の解決策を提供してもらえますか?

ありがとうございました!

4

2 に答える 2

0

ETL プロシージャの作成中に同じ問題が発生しました。ステージングデータを実際のコアテーブルに移動すると、ステージングテーブルにすべての列がありました.NVARCHARソリューションは、コアに挿入する前に、その列を適切な数値に変換しました. すでに NVARCHR 列があるため、必要に応じて Float と Again Numeric を使用して同じ列で Update を実行する必要があります。

DECLARE @t NUMERIC(28,10)
SELECT @t=CONVERT(NUMERIC(28,10),CONVERT(FLOAT,'1.2408E+12'))
SELECT @t

update <tablename> SET <ColumnName> = CONVERT(NUMERIC(28,10),CONVERT(FLOAT,<ColumnName>))

次に、ALTER 操作を実行します。ただし、次の BCP を同じ列に挿入する場合は、値を正しいデータ型に格納する別の列を用意することをお勧めします。「データ型への変換中にエラーが発生しました ....」が原因で INSERT が失敗した場合は、数値に変換できないデータがあることを意味します。その問題に関する別の投稿を参照してください。

ISNUMERIC SQL 関数で値全体として検索する文字

于 2013-10-01T21:01:26.290 に答える