2010-05-25 93 views
0

我使用這樣的:OPENROWSET插入NULL

insert into bla select * 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
    'Excel 8.0;HDR=YES;Database=c:\bla.xls', 
    'select * from [Sheet1$]'); 

但由於某些原因有些值包含空儘管原始數據肯定包含的值(例如「ABC」)。什麼可能是這種奇怪行爲的原因。謝謝。

克里斯

+0

包含神祕空值的列是否有一些純粹數值的值? – Thomas 2010-05-25 13:19:42

回答

2

嘗試增加「; IMEX = 1」(閱讀所有領域的文本 - 這可能與混合值&文本做)。

第二個選項是嘗試安裝Office數據連接組件(從http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en) - 並且繞過OLEDB。然後設置你的OPENROWSET,如下:

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
'Excel 12.0;Database=c:\bla.xls;HDR=Yes;IMEX=1','SELECT * FROM [Sheet1$]'); 

祝你好運!

+0

此外,請查看http://www.connectionstrings.com/excel,其中建議編輯註冊表值TypeGuessRows以更改提供程序如何確定列數據類型的行爲。 – 2010-05-25 13:34:37

+0

感謝這工作正常。 – cs0815 2010-05-26 10:29:05

+0

美妙..我一直在努力解決同一個問題。我剛剛添加IMEX = 1,它工作得很好。 – satya 2010-07-14 08:43:06

0

我發現將Hkey_Local_Machine/Software/Microsoft/Jet/4.0/Engines/Excel/TypeGuessRows設置爲零並使用IMEX = 1選項將解決此問題。這意味着性能下降,因爲這意味着整個欄目都會被檢查,但我沒有注意到任何重要的事情。