2012-02-23 102 views
0

也許有人可以提供一些見解,我有問題。Excel SQL Server數據連接

我有一個SQL Server數據庫,它每小時接收一次信息,並使用Bulk Insert從存儲過程更新。這一切工作正常,但最終的結果是將這些信息提取到Excel中。

建立數據連接也工作得很好,直到我嘗試了一些計算。導入的數據全部格式化爲文本。 Excel的數字格式不起作用,所以我決定查看數據庫中的表格。

所有的列設置爲varchar爲大量插入工作,所以我改變了一些數字。在Excel中刷新並進行計算。

重複嘗試之後,我一直無法使大容量插入工作,即使使用bcp生成格式文件,它仍然在插入時返回錯誤。無法將varchar轉換爲數字,經過一些進一步搜索後,它只會失敗,通常是空的一個數字列。

除了使用VBA導入數據並將其轉換爲此類或將零值添加到每個導入的值以便Excel將其轉換。

歡迎任何建議。

謝謝!

+0

列中是否有無效字符,似乎觸發了問題?如果是這樣,則可以在導入前使用腳本清理數據或導入到臨時表中,並在複製到最後一個時清理並轉換列。同樣,如果您的任務對性能不敏感,則可以基於強制轉換創建視圖。 – ABS 2012-02-23 18:04:06

+0

當您將以文本形式存儲的數據包含在= value()中時 – Jesse 2012-02-24 18:22:02

回答

0

感謝您在Excel中考慮使用= value()的回覆,但想嘗試避免附加公式。

我最終能夠通過使用bcp實用程序生成大容量插入的格式文件來解決我的問題。雖然讓它成爲一個文件證明下面足夠棘手是我如何生成它的一個例子。

在提升的CMD:

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

這產生用於特定表的XML格式的文件。由於我的表格有兩個額外的列,這些列不在源數據中,所以我編輯了XML並將其刪除。他們是uniqueid和getdate列。

然後,我改變BULK INSERT語句所以它使用的格式文件:

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

使用這種方法,我能夠用數字和成功詮釋數據類型。當數據連接刷新時回到Excel,它能夠確定正確的數據類型。

希望能幫助別人!