有没有一种方法可以使用一个更新查询来更新多行?

时间:2019-04-24 10:27:54

标签: sql-server

我想将table_1 n等于今天的日期将table_2的数据更新为table_2.date_modificatio中存在的数据

例如:

         Table_1
------------------------------
    id   | Name  | phoneNumber
------------------------------

    1     George     +16742348743

    2     David      +16472379438


          Table_2
----------------------------------------------------------
    id   | Name  | phoneNumber|        Date_modification
-----------------------------------------------------------

    1     George     +19999999999       4/24/2019

    2     David      +11111111111       4/24/2019

假设我还有更多需要更新的数据。如何找到一种方法来仅使用一个更新查询来更新每个行具有不同数据的上一行?

5 个答案:

答案 0 :(得分:2)

我将使用此更新联接:

UPDATE t1
SET
    Name = t2.Name,
    phoneNumber = t2.phoneNumber
FROM Table_1 t1
INNER JOIN Table_2 t2
    ON t1.id = t2.id
WHERE
    t2.Date_modification = CONVERT(date, GETDATE());

如果两个表()中都存在匹配的Table_2,则此处的逻辑是将名称和电话号码从Table_1移至id Table_2中的修改日期应该是今天。

答案 1 :(得分:0)

update语句如下:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition; 

您要指定表名,然后指定要设置为其值的列,然后指定条件。这将更新满足条件的记录。如果一个以上记录满足了该条件,那么更新将更新多个记录。

答案 2 :(得分:0)

我猜您想更新phoneNumber,并且表通过Name联接:

update t1
set t1.phoneNumber = t2.phoneNumber
from Table_1 t1 inner join Table_2 t2
on t2.Name = t1.Name
where t2.Date_modification = convert(date, getdate())

答案 3 :(得分:0)

UPDATE Table_2 t2
SET    Name = t1.Name,PhoneNumber=t1.PhoneNumber,Date_modification=getdate()
FROM   Table_1 t1
WHERE  t1.id = t2.id;

请在测试数据库中尝试

答案 4 :(得分:0)

我将使用MERGE语句。这应该适用于您的示例:

MERGE table_1 AS target
USING table_2 AS source
ON (target.id = source.id and source.Date_modification = CONVERT(varchar(30), GETDATE(), 111))
WHEN MATCHED THEN
    UPDATE SET 
    target.Name = source.Name
    ,target.phoneNumber = source.phoneNumber;

它的作用是:

  1. table_1设置为目标表,并将table_2设置为源表
  2. 检查id是否匹配并且Date_modification是否今天
  3. 将目标(Name)中的phoneNumbertable_1列更新为源(table_2)中的内容

我已经在您提供的测试数据上进行过尝试,但是为了安全起见,我建议您先在测试环境或begin/rollback transaction封装中运行它。

有关MERGE语句的更多信息,可以在这里找到:https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql?view=sql-server-2017