web-dev-qa-db-ja.com

ExcelからSQL Serverへのデータのインポートがすべてのデータのインポートに失敗する

データのインポートとエクスポートツールを使用して、ExcelからSQL Serverにデータをインポートすると、奇妙なことが起こります。

簡単に言えば、Excelでデータを表示できますが、すべてのデータはインポートされません。

1つのスプレッドシートを含むExcelブックがあります。列のデータを見ることができ、すべてがきれいに見えます。インポートウィザードを使用してデータをインポートすると、列とプレビューデータが表示されますが、インポートの実行時にデータがすべて転送されるわけではありません。エラーは発生せず、インポートプロセスは終了します。テーブルに多数のnull値を挿入するだけです。

ほとんどの場合、数字で発生するようです。名前、姓、ID番号の3つの列があるとします。すべての名と姓、およびいくつかのID番号を取得します。何が起こっているかのパターンを見つけることができません。

以前にこれが一度発生しましたが、インポートプロセス中に選択できるスプレッドシートが2つあることに気付きました:DataImportとDataImport $-最初のスプレッドシートは上記のように失敗し、2番目のスプレッドシートは問題なくインポートされます。今回は、選択するスプレッドシートは1つだけです。

私は主に64ビットシステムでXLSドキュメントと32ビットインポートウィザードを使用していますが、何でも試してみます。

スプレッドシートが2つある(時々)理由と、このインポートが失敗する理由についてのアイデアはありますか?

デイブ

14
Dave Mroz

質問への回答には、データがExcelに保存される方法が含まれる場合があります。

私はちょうど同じ問題に出くわしました。数値とダッシュ付き数値の2種類の値を含む列がありました。 (例:51000および2009-00949)NVARCHARまたはVARCHARとしてインポートする必要がありましたが、SQLインポートウィザード(SQL2005)は数値のみをインポートし、ダッシュ付きの数値またはダッシュ付きの数値はインポートせず、数値はインポートしませんでした、最初のレコードに含まれていたタイプに応じて。インポートされなかった値のフィールドには「null」値が含まれ、レコードが役に立たなくなります。

Excelで[書式] | [セル]メニューオプション(数値、テキスト、一般など)およびSQLのさまざまなマッピングオプション(nvar、nvarchar、varchar、sqlvariant、float)を使用しようとしましたが成功しませんでした。

解決策は、数値をテキストとして保存するためにセルの書式設定オプションではなく、Excelの[データ|列へのテキスト]オプションを使用することでした。列でこれを使用すると、数値(例:51000)がテキスト値として保存された数値に変換され(左上隅に小さな緑色の三角形のエラーが表示されます)、ダッシュ付きの数値はテキストとして残りました。データをこの形式で残しておく必要がありました。小さな緑色の三角形のエラーがあった場合、SQLに正常にインポートできませんでした。列内のデータがこの形式で保存された場合、2種類の列データ(ダッシュ付きの数値と数値)は他のレコードデータと共に正しくインポートされ、列にはNULL値はありません。

36
user3139523

私の問題は、私がインポートしていたファイルが古くてやや悪いExcelファイルだったことでした。ファイルを開いて.xlsxとして保存し、その後、nullデータなしでファイルが正常にインポートされました。

2
mcfea

テキストデータが先頭になるようにデータを並べ替えることで問題を解決できました。このようにして、SQL Serverは数値データではなくテキストデータであることを認識しました。

1
Wayne Kartchner

私も問題を抱えています。私が解決できた唯一の方法は、.xlsxファイルを.csvファイルとして保存し、.csvファイルをSQL Serverの「データのインポート」に使用することでした。

Microsoft ExcelとMicrosoft SQL Serverの統合はよりクリーンになりそうです。

私のバージョンは次のとおりです。Excel2013。SQLServer 2012。

0
Dave Benz

。xlsxファイルを使用して、まったく同じ問題に直面しました。

0

sSMSからのインポートツールは、最初の「x」行のサンプルを使用して列のデータ型とそのその他の特性を決定するようです。したがって、選択した場合、テキスト値はnullとして取得され、番号が表示されないテキストとして。 Microsoft Accessがある場合、最初にアクセスインポートを使用して独自の列タイプを選択し、それをアクセスファイルとして保存してから、SQLサーバーへのアクセスと「出来上がり」をインポートすることができます。 (少なくとも私にとって)、それが誰かを助けることを願っています。

0
waroxx

インポートウィザードを使用していますか?クリック Edit Mappingsウィザードの[ソーステーブルとビューの選択]ページで、各ソース列の[タイプ]、[Nullable]、および[サイズ]列を確認します。何かが適切にマッピングされていないようです。

0
Ann L.

最も可能性が高いのは、SQL Serverが残りのデータを無視する、おそらく空白の行です。確かに、Excelファイルのスキーマと最初の5行を共有できますか?正しい3つと次の2つのレコード。

0
Semih Yagcioglu

その列のすべての行を選択し、Excelでタイプをテキストに変更してから、列全体を選択し、タイプをテキストに変更すると、確実に機能します。

0
Munam Yousuf

最後に、数値があるセルを一般的な書式に設定すると、以前は%sが表示されていましたが、解決されました。

0