由于業(yè)務需求脏答,需要將excel 文件中某一列的數(shù)據(jù)按照對應關系更新到已有的表中玩裙,即將表中某一列的數(shù)據(jù)按照對應關系更新到已有的數(shù)據(jù)中叹哭,從網(wǎng)上搜索到了一些代碼但是在實際使用過程中還是遇到不少問題勤揩,下面列出可執(zhí)行代碼俗批,以及更新數(shù)據(jù)中出現(xiàn)的問題及解決方案俗或。
-- 連接成功以后excel 文件就類似一個小型的數(shù)據(jù)庫,里面的工作表就類似數(shù)據(jù)庫里的表
-- 通過搜索語句可以檢測是否能正確連接并讀取excel 語句
SELECT * FROM OpenDataSource( 'Microsoft.ACE.OLEDB.12.0','Data Source="e:\test1.xlsx";Extended properties=Excel 13.0')...sheet1$ as a
-- 更新語句
update Interface_Voucher_Head set hscode = (SELECT top 1 a.憑證編號 FROM OpenDataSource( 'Microsoft.ACE.OLEDB.12.0','Data Source="e:\test1.xlsx";Extended properties=Excel 5.0')...sheet1$ as a where right(a.OA單據(jù)號,14) = Interface_Voucher_Head.PayID)
出錯提示:
因為 OLE DB 訪問接口 'MICROSOFT.JET.OLEDB.4.0' 配置為在單線程單元模式下運行岁忘,所以該訪問接口無法用于分布式查詢辛慰。
報錯原因:
在64SQL Engine中已經(jīng)不提供jet.oledb.4.0的驅動
解決辦法:
需要下載一個64位的AccessDatabaseEngine_X64.exe 驅動文件,并在電腦上運行臭觉,Sql語句中把 'MICROSOFT.JET.OLEDB.4.0'改成Microsoft.ACE.OLEDB.12.0
出錯提示:
SQL Server 阻止了對組件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的訪問昆雀,因為此組件已作為此服務器安全配置的一部分而被關閉。系統(tǒng)管理員可以通過使用 sp_configure 啟用 'Ad Hoc Distributed Queries'蝠筑。有關啟用 'Ad Hoc Distributed Queries' 的詳細信息狞膘,請參閱 SQL Server 聯(lián)機叢書中的 "外圍應用配置器"。
出錯原因:
數(shù)據(jù)庫基于安全原因考慮禁用了Ad Hoc Distributed Queries組件
解決方法:
--開啟Ad Hoc Distributed Queries組件
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
-- 注意對數(shù)據(jù)庫操作完成以后要通過以下語句禁用Ad Hoc Distributed Queries組件
exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure
出錯提示:
無法創(chuàng)建鏈接服務器 "(null)" 的 OLE DB 訪問接口 "Microsoft.ACE.OLEDB.12.0" 的實例
解決方案:
--允許在進程中使用ACE.OLEDB.12
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
--允許動態(tài)參數(shù)
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
錯誤提示:
無法初始化鏈接服務器 "(null)" 的 OLE DB 訪問接口 "Microsoft.ACE.OLEDB.12.0" 的數(shù)據(jù)源對象什乙。
原因及解決方法:
excel 文件路徑有問題挽封,導致無法連接到原文件,在查詢excel中的數(shù)據(jù)時我的文件路徑是放在自己微軟賬號下的文件夾里面臣镣,數(shù)據(jù)庫訪問時出現(xiàn)問題辅愿,后把文件放在公共文件夾下面就可以順利讀取excel文件中的內容了。
鏈接服務器"(null)"的 OLE DB 訪問接口 "Microsoft.ACE.OLEDB.12.0" 返回了消息 "找不到可安裝的 ISAM忆某。"
sql 語句錯誤導致
-- 錯誤sql
SELECT a.OA單據(jù)號 FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 13.0;HDR=YES;IMEX=1;Database=e:\test1.xlsx',[sheet1$]) as a
--正確
SELECT a.OA單據(jù)號 FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;HDR=YES;IMEX=1;Database=e:\test1.xlsx',[sheet1$]) as a
--雖然安裝的excel版本是13.0 但是sql語句要寫12.0 才能正確進行搜索点待,不知道是因為什么。
參考鏈接:
http://blog.csdn.net/xufuyuan/article/details/48812109
AccessDatabaseEngine_X64 下載鏈接:
http://download.csdn.net/download/lin6791022/6685581