2013-06-28 283 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