2013-03-01 103 views
0

我看了很多這個問題的答案是說,如果你更新並沒有改變一列,但它可以做的其實並不重要,我不知道是否有一個體面的解決方案。SQLServer的更新,當值更改

我們有更新的記錄的所有字段的更新PROC - 他們中的一些可能是它們目前都是相同的值。

我們的問題是,我們有一個索引視圖,其中該表爲一雙親到成千上萬的孩子記錄和一些該表中的字段是在索引視圖。每次我們進行更新時,即使它實際上保持不變,仍然在維護該索引視圖方面做了很多工作。

我希望能夠做一個UPDATE SET和有如果有值是不同的只是設置一些辦法。不是where子句,因爲我仍然希望更新其他字段。

我猜實體框架做這樣的事情在創建動態更新語句?對於使用存儲過程進行更新的ADO.NET用戶是否有簡單的解決方案?

TIA

+0

我不明白爲什麼索引需要重建,如果你更新一個值爲同一件事情?在這種情況下,這個指數肯定會保持不變。如果您將某個值更新爲其他值,那麼該索引可能還需要更新。我認爲你正在拍攝一些不會改進系統的東西。 – 2013-03-01 08:59:49

+0

嘗試創建父表和子表,然後嘗試創建包含一個或兩個父表的字段的索引視圖。爲單個父項創建一個1000個子行。然後,如果您更新了父表,並將這些字段設置爲相同,您將在解釋計劃中看到,索引視圖中的工作量非常大。現在只需更新父表,但不設置這些視圖字段。我們擁有50000-100000個子行的父行,即使相關字段沒有更改,在更新父行時也會導致嚴重頭痛 – user2047485 2013-03-05 13:40:40

回答

0

沒有看到你的代碼,它是一種很難看到你現在在做什麼,但我會包括像一個WHERE table.value != newValue

I.e.

UPDATE myTargetTable 
SET myTargetTable.myColumn = mySourceTable.newValue 
FROM mySourceTable JOIN myTargetTable on mySourceTable.ID = myTargetTable.ID 
WHERE myTargetTable.myColumn != mySourceTable.newValue 
+0

「不是where子句,因爲我仍然希望其他字段更新」似乎排除了這一點。 – 2013-03-01 09:05:04

+0

嗯。我錯過了那篇文章。 – SchmitzIT 2013-03-01 09:22:55

+0

不幸的是,當你更新5個字段時,這並不是什麼好事,實際上只有其中2個已經改變。 – user2047485 2013-03-05 13:41:32