2017-09-26 89 views
1

我最近已將Access後端傳輸到SQL Server,現在我知道如何將查詢傳遞給SQL Server以使其執行計算。但是,這僅適用於如果僅包含表查詢我,例如:訪問2010前端將查詢傳遞給SQL Server 2014後端

Q_Test:

SELECT * FROM T_Test 

,但如果我想通過對包含另一個查詢服務器通過查詢(與此查詢包含一些其他查詢太),例如:

Q_Test3:

SELECT * FROM Q_Test2 
INNER JOIN .. 

Q_Test2:

Select * From Q_Test.. 

然後我認爲它笨重,並且爲了將代碼翻譯成「唯一表」SQL代碼變得複雜。是否有可能以一種聰明的方式將包含子查詢的查詢傳遞給SQL Server?我在我的Access前端保存了一些查詢,有些我通過VBA代碼打開,有些是在Forms的Recordsources中編寫的,需要更改它們才能使其工作。對於只包含表的查詢,VBA代碼可以工作。

林的任何幫助

回答

1

這裏的主要問題非常感謝的是,你試圖讓SQL Server使用訪問構建物的SQL Server無法甚至可能知道的。它對Access查詢以及Access文件中包含的任何其他對象都一無所知。

它只知道它自己的對象 - 換句話說,你可以在SQL Server Management Studio的對象瀏覽器中看到的內容是你可以在傳遞查詢中「看到」的內容,因爲這是你正在使用的環境。

您應該考慮傳遞查詢允許您使用對於Access而言屬於外部的SQL Server結構,例如存儲過程或表值函數,或Access SQL方言中不支持的某些T-SQL語法。考慮到這一點,您應該在SSMS中編寫存儲過程,對其進行測試,並在合適時從Access傳遞查詢中調用該過程。如果您需要更新(例如,將結果綁定到表單並編輯數據),請考慮使用視圖。請注意,視圖上哪些更新是合法的,有一些限制。

+0

好的,謝謝你的幫助。我將嘗試將自己讀入存儲過程。似乎是正確的。但是,是否有可能在sql server上保存查詢,以便知道後面的表?或者將查詢保存到他可以閱讀的文件或其他內容? –

+0

爲什麼不只是[鏈接你的SQL Server表](https://support.office.com/en-us/article/Import-or-link-to-data-in-an-SQL-Server-database-a5a3b4eb- 57b9-45a0-b732-77bc6089b84e?ui = en-US&rs = en-US&ad = US)到Access應用程序並對它們運行本地查詢?傳遞查詢需要什麼?除非您使用無法轉換爲Access方言的SQL Server方言,或者需要Access應用程序不需要的操作,否則可能不需要傳遞查詢。 – Parfait

+0

因爲運行本地查詢的速度非常慢。你可以糾正我,但我認爲這是運行SQL Server的原因,所以它可以做計算,只給我結果。我的程序現在運行得非常慢,所以這就是爲什麼即時嘗試SQL服務器..使其運行速度更快。 我也試圖通過vba打開一個查詢,我通過訪問。我可以在訪問中打開它,它打開方式更快,但如果我嘗試用vba打開此查詢,它說它不知道對象「myquery」 –

0

請理解,傳遞查詢就是這樣做的。 SQL Server不知道你的Access應用程序是關於什麼的。

訪問和ODBC驅動程序知道這一點,所以如果您包含本地查詢,表或函數,所有處理將發生在Access中。

傳遞查詢只能處理服務器對象。 提示:但是,這些可能會包含由Access應用程序填充的臨時表。