如果UPDATE找到多个值,为什么它不会失败?

时间:2015-02-10 10:35:45

标签: sql sql-server tsql

如果使用带有FROM语句的别名更新并且FROM语句中使用的JOIN意味着SET操作将有多个可能的值,那么为什么SQL Server允许UPDATE发生?它似乎从可能的集合中选择了最高值,但这不是一致的方法,所以为什么声明不会失败呢?

示例:

CREATE TABLE #Updated (ID_Unq INT, Value CHAR(1));

CREATE TABLE #UpdateFrom (ID_Non_Unq INT, Value CHAR(1));

INSERT INTO #Updated (ID_Unq, Value) VALUES
(1,'A'),
(2,'B'),
(3,'C');

INSERT INTO #UpdateFrom (ID_Non_Unq, Value) VALUES
(1,'A'),
(1,'B'),
(2,'C'),
(2,'D'),
(3,'E'),
(3,'F');

SELECT *
FROM #Updated a
JOIN #UpdateFrom b ON a.ID_Unq = b.ID_Non_Unq;

UPDATE a
SET Value = b.Value
FROM #Updated a
JOIN #UpdateFrom b ON a.ID_Unq = b.ID_Non_Unq;

SELECT * FROM #Updated;

1 个答案:

答案 0 :(得分:1)

SQL将允许许多不确定的操作 如果没有订单条款,退回的订单可能会发生变化 处理的第一行(和最后一行)可能会更改

而不是让SQL猜测执行只返回单个值的更新

e.g。

UPDATE a 
SET Value = max(b.Value) 
FROM #Updated a  
JOIN #UpdateFrom b ON a.ID_Unq = b.ID_Non_Unq   
GROUP BY a.Value;