我正在尝试更新我的表格产品,但仅针对临时表格中的行,请参阅下文:
Table Products
PkProduct Price DateChanged
1 4.99 2013-01-01
1 5.99 2014-01-01
2 10.50 2000-01-01
2 12.50 2002-01-01
2 14.50 2003-01-01
3 0.99 2000-01-01
4 0.99 2000-01-01
5 0.99 2000-01-01
Temporary Table #temptable
PkProduct Price DateChanged
2 12.50 2002-01-01
2 14.50 2003-01-01
您可以看到我的#temptable包含行等于到表Products
我想为这些行设置一个新价格,让我们说@variableNewPrice = 2.75
我正在尝试在更新代码中创建一个联接:
UPDATE Products
SET Price = @variableNewPrice
FROM Products p1
RIGHT JOIN #temptable p2
ON p2.PkProduct = p1.PkProduct
AND p2.Price = p1.Price
AND P2.DateChanged = p1.DateChanged
效果不好。我只尝试了PkProduct = PkProduct
但是后来这个PkProduct的每一行都改变了!我没有列PkProduct,它是表的真正唯一Pk。
感谢您的帮助=)
答案 0 :(得分:1)
这应该是您尝试做的正确语法:
UPDATE P
SET Price = @variableNewPrice
FROM Products P
JOIN #temptable T ON P.PkProduct = T.PkProduct
AND P.Price = T.Price
AND P.DateChanged = T.DateChanged
查询有两个问题 - 最后一个ON
子句是T.DateChanged = T.DateChanged
,它始终是真的。另一个问题是你也在做OUTER JOIN
,这在这种情况下没有意义。我修改了查询以使用INNER JOIN
。