如果特定列的旧列和新列值相同,则阻止更新

时间:2017-08-24 04:49:25

标签: sql sql-server

考虑到表有100列,我想防止更新,如果旧值与新值有效相同这是方法将具有执行的好处,因为它从我们更新的同一个表中获取?。任何建议?

 Update MyTable 
 SET Col1=CASE WHEN mt.Col1 !=mt.Col1 THEN i.Col1 else mt.Col1,
     Col2=CASE WHEN mt.Col2 !=mt.Col2 THEN i.Col2 else mt.Col2,
 .
 .
     Col100 =
 FROM MyTable mt JOIN INSERED i ON mt.id=i.id

2 个答案:

答案 0 :(得分:0)

只有当两个表的特定列不相等时,才可以使用where condition更新。

UPDATE MyTable
SET mt.Col1 = i.Col1, mt.Col2 = i.Col2, ....
FROM
MyTable mt 
JOIN 
INSERED i 
ON (mt.id=i.id)
WHERE mt.Col1 != i.Col1

答案 1 :(得分:0)

考虑使用两个表中的时间戳列指示上次修改日期时间,并更改您的更新以将其包含在where。

更新MyTable  mt.Col1 = i.Col1,  mt.Col2 = i.Col2,  。  。      Col100 =  来自MyTable mt JOIN INSERED i on mt.id = i.id. 其中mt.FecMod!= i.FecMod