Есть ли способ обновить несколько строк, используя один запрос на обновление? - PullRequest
0 голосов
/ 24 апреля 2019

Я хочу обновить мои table_1 данные, чтобы данные существовали в table_2 с условием, что table_2.date_modificatio n равно сегодняшней дате

Например:

         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 ]

2 голосов
/ 24 апреля 2019

Я бы использовал это обновление присоединиться:

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 быть сегодня.

0 голосов
/ 24 апреля 2019

Я бы использовал оператор 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 и phoneNumber в цели (table_1) в соответствии с тем, что находится в источнике (table_2)

Я пробовал это на предоставленных вами тестовых данных, но я бы рекомендовал сначала выполнить это в тестовой среде или в инкапсуляции begin/rollback transaction, просто для безопасности.

Более подробную информацию об операторе MERGE можно найти здесь: https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql?view=sql-server-2017

0 голосов
/ 24 апреля 2019
UPDATE Table_2 t2
SET    Name = t1.Name,PhoneNumber=t1.PhoneNumber,Date_modification=getdate()
FROM   Table_1 t1
WHERE  t1.id = t2.id;

Пожалуйста, попробуйте это в тестовой базе данных

0 голосов
/ 24 апреля 2019

Полагаю, вы хотите обновить 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())
0 голосов
/ 24 апреля 2019

Оператор update выглядит следующим образом:

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

Вы указываете имя таблицы, затем столбцы, которые должны быть установлены на их значения, а затем условие. Это обновляет записи, где выполняется условие. Если условие выполняется более чем одной записью, обновление будет обновлять больше, чем запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...