2017-08-24 19 views
1

考慮到表有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 
+1

你們是不是要做到這一點觸發器或存儲過程中? –

+0

是裏面觸發器 –

+0

可能重複的[SQL Server - 插入/插入 - 回滾後](https://stackoverflow.com/questions/13373168/sql-server-after-insert-for-insert-rollback) – TheVillageIdiot

回答

0

只有當兩個表的特定列不相等時,纔可以使用where條件進行更新。

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 
+0

好吧,我明白了。我的疑問是:當mt.Col1 = i.Col1 –

+0

時,是否有任何方法可以防止更新mt.Col1由於數據是從獲取更新的同一個表中獲取的,因此我上面顯示的方法是否會具有任何性能優勢? –

+0

你能提出一個很好的有效方法嗎?請具體到我的問題 –

0

考慮在兩個表中使用時間戳列來指示上次修改日期時間,並更改您的更新以將其包含在其中。

更新MyTable的 mt.Col1 = i.Col1, mt.Col2 = i.Col2, 。 。 Col100 = FROM MyTable的MT JOIN INSERED我ON mt.id = i.id 其中mt.FecMod!= i.FecMod

相關問題