2012-02-23 30 views
0

おそらく誰かが私が持っている問題についていくつかの洞察を提供することができます。Excel SQL Serverのデータ接続

私は毎時情報を受け取り、一括挿入を使用してストアドプロシージャから更新されるSQL Serverデータベースを持っています。これはすべて正常に動作しますが、最終的にはこの情報をExcelに取り込むことになります。

いくつかの計算を試みるまで、データ接続を確立しても正常に機能しました。インポートされたデータはすべてテキスト形式です。 Excelの数値書式が機能しないので、データベースのテーブルを調べることにしました。

バルク挿入が機能するように、すべての列がvarcharに設定されているため、いくつかを数値に変更しました。 Excelでリフレッシュし、計算が機能しました。

繰り返し試行した後に、バルク挿入が機能しなくなったため、bcpでフォーマットファイルを生成しても、挿入時にエラーが返されました。 varcharを数値に変換できませんでした。さらに検索すると、一般に空の1つの数値列にのみ失敗しました。

VBAを使用してデータをインポートし、そのように変換するか、インポートされたすべての値にゼロを追加する以外は、Excelによって変換されます。

ご提案は大歓迎です。

ありがとうございます!

+0

問題を引き起こしているように見える無効な文字が列にありますか?その場合は、スクリプトを使用してインポートする前にデータをクリーニングするか、ステージングテーブルにインポートして、コピー中に列をクリーンにキャストして最終的なテーブルにキャストすることができます。同様に、タスクがパフォーマンスに影響されない場合は、キャストに基づいてビューを作成できます。 – ABS

+0

テキストとして保存されているデータを参照するときは、値を= value()にラップします。 – Jesse

答えて

0

回答ありがとうございました。私はExcelで= value()を使用したと考えていましたが、追加の式を避けようとしました。

最終的には、bcpユーティリティを使用してバルク挿入用のフォーマットファイルを生成することで、私の問題を解決することができました。以下に十分に難しいと証明されたファイルを生成することは、私がどのように生成したかの例です。高められたCMDにおいて

C:\>bcp databasename.dbo.tablename format nul -c -x -f outputformatfile.xml -t, -S localhost\SQLINSTANCE -T 

これは、特定のテーブルのXML形式のファイルを生成しました。私のテーブルにはソースデータにない2つの追加の列があるので、XMLを編集して削除しました。彼らはユニークで列をゲットしていました。私は成功した数値とint型のデータ型を使用することができた。この方法を使用して

BULK INSERT [database].[dbo].[tablename] 
FROM 'C:\bulkinsertdata.txt' 
WITH (FORMATFILE='C:\outputformatfile.xml',FIRSTROW=3) 

:それは形式のファイルを使用して

は、それから私は、一括挿入ステートメントを変更しました。データ接続が更新されたときにExcelに戻り、正しいデータ型を判断できました。

誰かを助ける希望!