我感兴趣的是这两个查询之间的区别是:
这个有SELECT TOP 1
UPDATE tblTemp SET [SOH] = (Select top 1 (tblstock.[Stock On Hand (Base UOM)])
FROM tblstock
WHERE tblTEMP.[ID] = tblstock.[ID])
而且这个不是
UPDATE tblTemp SET [SOH] = (Select tblstock.[Stock On Hand (Base UOM)])
FROM tblstock
WHERE tblTEMP.[ID] = tblstock.[ID]
第一个会影响更多行。
所以我的问题是:他们在做同样的事情吗?
答案 0 :(得分:3)
首先,第二个更恰当地写为:
UPDATE tblTemp
SET [SOH] = tblstock.[Stock On Hand (Base UOM)]
FROM tblstock
WHERE tblTEMP.[ID] = tblstock.[ID];
(没有理由让子查询没有FROM
子句;它是一个浪费的SELECT
。)
其次,他们不做同样的事情。如果没有匹配,第一个会将SOH
设置为NULL
。第二个不会改变现有价值。
这忽略了有多个匹配时会发生什么。 SQL Server未指定用于更新的行。因此,即使相同的查询也可能在相同数据的不同运行中产生不同的结果。
答案 1 :(得分:1)
在第一个查询中,您的子查询包含您的where子句。所以它将在tblTemp表中更新所有内容。
第二个查询在子查询之外提供了where子句,因此将其应用于tblTemp表。