2012-10-18 15 views
1

它似乎只能使用傳遞查詢從您的SQL Server表和MS Access中檢索數據。但另一種方式呢?從Access表到SQL服務器表。如何通過傳遞查詢將Access表中的數據追加到SQL服務器表中?

當我需要高性能時,MS Access中有哪些選項?
(具有追加查詢追加到一個鏈接表的正常方法是簡單地太慢

在一個傳遞查詢我不能引用MS訪問表或查詢,因此我的INSERT INTO語句無法工作。有沒有通過VBA的工作?

+1

在這個方向上的連接總是很慢,因爲Access將在本地處理所有工作,所以你不能獲得服務器的優勢。如果你有一定級別的SQL服務器訪問,那麼我總是發現最好的方法是從訪問標準txt或csv文件導出,然後使用SQL服務器的**批量插入**選項。如果您不得不從訪問端完成所有操作,那麼遺憾的是,並沒有真正的快速方法。 –

+1

我可能會嘗試使用DAO(VBA)或ADO來比較速度。您也可以嘗試使用ADO和SQL Server存儲過程一起使用。但是我同意Matt的觀點,即你可以通過使用Access以外的其他方式來獲得最大收益。即使是.NET dll或AddIn也可以工作,因爲我相信任何人都可以使用後臺線程(儘管如此,可能會出現陷阱和打嗝)。 – HK1

+0

感謝您的意見。看起來這似乎揭示了Access中的另一個限制,除此之外還有其他許多限制。 – MOLAP

回答

0

您可以在傳遞查詢中使用OPENROWSET。

SELECT id, 
     atext 
INTO anewtable 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
        'z:\docs\test.accdb'; 'admin';'',table1); 

你可能需要一些或所有這些選項:

sp_configure 'show advanced options', 1; 
RECONFIGURE; 
GO 
sp_configure 'Ad Hoc Distributed Queries', 1; 
RECONFIGURE; 
GO 

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', 
    N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', 
    N'DynamicParameters', 1 
GO 

我懷疑,這將是任何更快。

0

Access中有可能使用宏來動態創建使用SetValue的傳遞查詢定義(我認爲現在稱爲SetProperty)。基本上,您可以更新現有傳遞查詢的查詢定義,然後運行它。我曾經這樣做過,速度快了很多,但那是很久以前的事了。我可能有一段VB循環通過一個表來創建查詢。

相關問題