Обновлять несколько таблиц одновременно - SQL Server / T-SQL - PullRequest
0 голосов
/ 21 мая 2010

У меня есть две таблицы, Customer и CustomerPhone.

Одна запись в Customer может иметь несколько записей CustomerPhone. Как показано на рисунке ниже, Телефон и Факс находятся в таблице CustomerPhone, тогда как остальные поля находятся в таблице Customer. Если пользователь хочет отредактировать запись клиента, очевидно, мне придется обновить запись в таблице Customer и как минимум две записи из CustomerPhone (телефон и факс).

http://img714.imageshack.us/img714/9417/snapshotapp.jpg http://img714.imageshack.us/img714/9417/snapshotapp.jpg

Я мог бы написать два заявления об обновлении, одно обновление CustomerPhone и второе обновление таблицы Customer. Есть ли лучшее решение?

Ответы [ 2 ]

4 голосов
/ 21 мая 2010

В таком случае риск состоит в том, что одно обновление завершается успешно, но по какой-то причине происходит сбой другого (сетевой кабель отключен, сбой питания и т. Д.), В результате чего ваши данные в базе данных будут неверными.

Вы можете преодолеть это двумя способами.

  1. сделать 2 отдельных обновления, но заключить их в одну транзакцию
  2. Реализация обновления клиента хранимая процедура, которая обновляет оба столы для вас, либо в неявная или явная транзакция.

В SQL нет способа обновить несколько таблиц в одном операторе, но вы, конечно, можете иметь несколько операторов в одной команде.

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

1 голос
/ 21 мая 2010

Несколько способов об этом:

  • Запись двух операторов обновления, заключенных в транзакцию ( TransactionScope объект)
  • Напишите хранимую процедуру, которая выполняет обновление, и используйте SQL Управление транзакциями
  • Оба
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...