2012-10-11 44 views
0

我有以下查询。我想要做的是根据给定Id的DetailTbl中的值更新HeaderTbl中的Type字段。加入SQL更新并选择

update HeaderTbl 
set HeaderTbl.Type = DetailTbl.Type 
from HeaderTbl 
join DetailTbl on HeaderTbl.Id = DetailTbl.Id 

对于HeaderTbl id,可以有多个DetailTbl ID。

对于给定的Id(让我们说Id = 5),我们有7个Id,它们在DetailTbl中是Id = 5。 通过上面的查询,它会碰到HeaderTbl,然后更新它 - 正确吗?最后的第七个结果会坚持,对吗?

我正在做一个大的更新,所以只是想确保我不会忽略任何东西。

+0

你是什么意思“结果会坚持到最后的第7个”? – amphibient

+0

为什么不只是测试它?但是你有一个更大的问题 - 它怎么知道'最后的'细节记录是什么?您可能需要提供一些有区别的信息,以使其只能得到一条记录(我不确定如果连接返回多行,会发生什么情况)。 –

+0

在我的情况下,Id = 5,DetailTbl中Id = 5的最后或第7条记录将是在HeaderTbl中更新的值。 –

回答

1

每行更新只能完成一次。您可以使用“实际执行计划”或使用OUTPUT子句查看。 如果Ifin DetailTbl表中ID为Type列中的多个不同值,则结果不确定。

http://sqlfiddle.com/#!3/82363/1