2013-06-28 49 views
1

我使用SQL Server 2012SQL查詢選擇一個更新,記錄,即沒有更新

只是好奇,如果有一種方法做這樣的事情...

我的更新查詢長相像

UPDATE a 
SET a.TowerNumber=b.SiteNumber 
FROM tower a 
INNER JOIN sites b 
ON a.sitenumber = b.sitenumber 

什麼,我想開行後做的是一樣的東西在

EDIT **select records that did not match the ON statement** 

感謝advance

+0

你能更好地解釋你是什麼試圖完成? –

+0

你正在使用哪個數據庫? SQL Server?甲骨文? MySQL的?請爲其添加標籤以幫助吸引可以幫助您的人的注意力。 – DOK

+0

對不起,我以爲我做了,讓我再試一次:我正在嘗試查找記錄我的Update語句沒有更新,是否更清楚? – Pakk

回答

2

此查詢返回由於未滿足ON(加入)條件而不會被更新觸及的所有行。

SELECT * 
    FROM tower 
WHERE sitenumber NOT IN 
    (SELECT sitenumber 
     FROM sites) 
+1

在「高度併發」的環境中,結果仍能保證嗎?我認爲結果可能會在選擇和更新操作之間發生變化。 – CyberDude

+0

是的,當然沒有,當然 – Pakk

+0

是的。這肯定無法在具有併發更新的環境中使用。 – mzedeler

0

我想你可以嘗試使用INSTEAD OF觸發器,然後利用DELETED表。它應該包含在更新操作過程中更新的行,所以您所要查找的是初始表中的其餘行(從表中選擇不在DELETED表中的行)

+3

觸發器會過度殺傷。可以'OUTPUT'更新行的主鍵值。 –

+0

確實,OUTPUT是這項工作的實際工具。 – CyberDude