Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据复制到SQL Server中同一表中的现有行_Sql_Sql Server_Sql Update - Fatal编程技术网

将数据复制到SQL Server中同一表中的现有行

将数据复制到SQL Server中同一表中的现有行,sql,sql-server,sql-update,Sql,Sql Server,Sql Update,在SQLServer2008中,我想用另一行的数据更新某些行。例如,给定以下示例数据: ID | NAME | PRICE --------------------------------------- 1 | Yellow Widget | 2.99 2 | Red Widget | 4.99 3 | Green Widget | 4.99 4 | Blue Widget |

在SQLServer2008中,我想用另一行的数据更新某些行。例如,给定以下示例数据:

ID   |     NAME           |    PRICE
---------------------------------------
 1   | Yellow Widget      |  2.99
 2   | Red Widget         |  4.99
 3   | Green Widget       |  4.99
 4   | Blue Widget        |  6.99
 5   | Purple Widget      |  1.99
 6   | Orange Widget      |  5.99
我想更新ID为2、3和5的行,以获得第4行的价格

我找到了一个很好的解决方案来更新一行,基本上如下所示:

DECLARE  @src int = 4
        ,@dst int = 2  -- but what about 3 and 5 ?

UPDATE  DST
SET     DST.price = SRC.price
FROM    widgets DST
    JOIN widgets SRC ON SRC.ID = @src AND DST.ID = @dst;
但是由于我需要更新多行,我不确定
连接应该是什么样子
SRC.ID=@SRC和DST.ID在(2,3,5)中
?(不确定这是否是有效的SQL?)

另外,如果有人能解释上面的解决方案如何不更新表中的所有行,因为没有
WHERE
子句,那就太好了


有什么想法吗?蒂亚

您可以使用表变量存储要更新的
ID
s:

DECLARE @tbl TABLE(ID INT PRIMARY KEY);
INSERT INTO @tbl VALUES (2), (3), (5);

DECLARE @destID INT = 4

UPDATE widgets 
    SET price = (SELECT price FROM widgets WHERE ID = @destID)
WHERE
    ID IN(SELECT ID FROM @tbl)
或者,您可以将源ID和目标ID存储在单个表变量中。对于这种情况,您需要存储
(2,4)
(3,4)
(5,4)


这是你必须执行的一次性活动,还是更新背后有某种逻辑……这不一定是一次性的,但肯定也不是经常重复的事情。为了回答您的问题,可以将其视为需要执行的一次性数据维护操作。
DECLARE @tbl TABLE(srcID INT, destID INT, PRIMARY KEY(srcID, destID));
INSERT INTO @tbl VALUES (2, 4), (3, 4), (5, 4);

UPDATE s
    SET s.Price = d.Price
FROM widgets s
INNER JOIN @tbl t ON t.srcID = s.ID
INNER JOIN widgets d
    ON d.ID = t.destID