2013-03-01 65 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