2013-07-10 114 views
1

我想從我們的MS SQL服務器上的ODBC連接數據庫創建表的緩存副本。我們目前直接從幾個Excel表連接到ODBC連接並運行查詢。他們需要大約1 - 2分鐘才能完成,並且每天運行數次,可以快速加起來。因此,爲了嘗試解決這個問題,我從ODBC連接複製了一對錶並運行查詢,大約需要11秒。我想創建一個表格副本並每隔一小時更新一次。但我只想更新已更改的表和行以嘗試並保持服務器負載不變。我想做一個存儲過程。我不是很好的SQL,並想知道如果有一個半簡單的方法來做到這一點將數據從ODBC連接複製到本地數據庫

回答

0

您可以編寫運行您的查詢,只是修改它微微地輸出到一個物理表的存儲過程。

例如:

select a.FirstName, a.LastName, b.City, b.State, b.zip into _temp_report 
from customers a join addresses b on a.customer_id = b.customer_id 

在上面的例子中,成_temp_report部分是重要的部分。它將創建一個包含查詢結果的新物理表。

然後您可以簡單地將報告指向該表。

您可以使用SQL Server代理創建按計劃運行存儲過程的作業。

顯然需要增加一些邏輯,以消除對存儲過程的每次運行的_temp_report表,所以你不要試圖給每個作業運行時間重新創建它。

+0

這只是複製表格的權利?它不添加更改的行?我緩存的數據庫大小約爲200mb,運行完整緩存查詢大約需要20分鐘。我想只選擇已添加的表中的行。我知道我將如何在C#或VB中做到這一點,但我不想爲服務器創建另一項服務。我寧願它是一個存儲過程,我可以定期運行 – Rocky3598

+0

我寫的虛假查詢將存儲在一個存儲過程中。它不僅僅是複製表格。它運行你的查詢需要20分鐘(順便說一下,200mb的20分鐘是非常令人驚訝的,我敢打賭,增加索引和其他一些小小的調整會花費這段時間),並將其輸出到臨時表中。您可以修改查詢以僅考慮最近更新/添加的行。最大的想法/要點是你可以運行一個存儲過程,該存儲過程只在存儲過程的查詢中創建一個新的表。 – ryan1234

+0

這樣做更有意義。不幸的是,我不能將索引添加到數據庫中,因爲它是我們會計軟件(Peachtree/Sage 50)的只讀數據庫, – Rocky3598

相關問題