2017-09-05 239 views
1

我正在使用MS SQL,並且有一個包含數百個工作成本中心數百萬活動的表。我們希望根據我們不同的管理級別和我們的報告結構分析數據。因此,我試圖用主數據表中的記錄更新數據。更新數百萬條記錄

到目前爲止,一切正常,但它太慢了。這就是我如何做到這一點的時刻:

UPDATE [Activity - E].dbo.td_Import 
SET [Sender.Type]    = tmp_CC.[Type], 
    [Sender.Person Responsible] = tmp_CC.[Person Responsible], 
    [Sender.Level1]    = tmp_CC.[Level 1], 
    [Sender.Level2]    = tmp_CC.[Level 2], 
    [Sender.Level3]    = tmp_CC.[Level 3], 
    [Sender.Level4]    = tmp_CC.[Level 4], 
    [Sender.Active]    = tmp_CC.[Active] 

FROM ( SELECT [Cost Center], [Type], [Person Responsible], [Level 1], [Level 2], [Level 3], [Level 4], [Active] 
     FROM [Master Data - E].dbo.md_CostCenter md_CC 
     WHERE (md_CC.[Record Invalid] LIKE '') OR (md_CC.[Record invalid] IS NULL)) tmp_CC 
WHERE ([Sender.CC] LIKE tmp_CC.[Cost Center]) AND ([Sender.Type] IS }NULL) 

我要運行類似的代碼五次,它需要大約90分鐘更新的所有記錄。由於數據應該全天候提供給管理人員,我只需要一個大約兩個小時的短窗口來獲取數據,更新所有信息併爲管理人員創建單個報告(excel報告,每個報告大約需要10分鐘) 。

我正在考慮與主數據表加入數據,但我在所有的教程中完全丟失了。我得到的只是一些臨時表,但沒有任何信息存儲在我的活動表(td_Import)中。

對初學者有任何建議嗎?提前致謝。

Chris

+0

這聽起來像是一個分析服務工作,也許看看建造一個或多個立方體。 – twoleggedhorse

+0

也許我在這裏錯過了一些東西,但我沒有看到你正在更新的表和同一個更新語句中的子查詢之間的關係。 –

+0

實際上,您的一些SQL可以重構,但我現在正在使用手機。如果沒有人回覆,我會在稍後幫你。 – twoleggedhorse

回答

0

我想我終於有了Join的概念。

以下代碼將運行時間從110多萬條記錄中的30分鐘改爲3分鐘。 此外,我還包括減少有效成本中心選擇的觀點(查看[有效成本中心])。

UPDATE [Activity - E].dbo.td_Import 
    SET [Sender.Type]    = md_CC.[Type], 
     [Sender.Person Responsible] = md_CC.[Person Responsible], 
     [Sender.Level1]    = md_CC.[Level 1], 
     [Sender.Level2]    = md_CC.[Level 2], 
     [Sender.Level3]    = md_CC.[Level 3], 
     [Sender.Level4]    = md_CC.[Level 4], 
     [Sender.Active]    = md_CC.[Active] 
    FROM [Activity - E].dbo.td_Import td_Imp 
     LEFT JOIN [Master Data - E].dbo.[Active Cost Centers] md_CC 
     ON td_Imp.[Sender.CC] LIKE md_CC.[Cost Center] 

我希望這會對其他人有所幫助。

Chris