Aitzaz Ahsan Ответов: 2

Как обновить два столбца на разных серверах в SQL server


  UPDATE mbTbl
  SET mbTbl.Status=erpTbl.[Status],mbTbl.ModifiedDate=GETDATE(),erpTbl.IsSent=1
  from openquery (LINKED, 'select * from mobileapp.student_status_tbl') as mbTbl
  INNER JOIN
  OPENROWSET('SQLNCLI',
'server=xxx.xx.x.xxxxx;Uid=xxxxx;Pwd=xxxx123;
database=[yd];
Persist Security Info=False',
'select * from AlahlidbN.dbo.mstudentstatus') as erpTbl
  ON erpTbl.Student_id=mbTbl.Student_PId
  WHERE erpTbl.IsSent=0  and erpTbl.Stage=mbTbl.Stage_


Что я уже пробовал:

дал такую ошибку

Многосоставный идентификатор "erpTbl.Иссент" не мог быть связан.

ZurdoDev

Я не верю, что вы можете обновлять поля из более чем одной таблицы одновременно, как это.

ZurdoDev

Вам нужно 2 инструкции обновления. Возможно, вы создадите временную таблицу для хранения идентификаторов, с которыми вам нужно работать, но вы не можете обновить 2 таблицы одним оператором update.

Aitzaz Ahsan

Большое спасибо, я понял вашу точку зрения.

2 Ответов

Рейтинг:
2

Maciej Los

Я бы посоветовал использовать связанный сервер[^]. Тогда вы сможете работать с базами данных как на одном сервере ;)

Для получения более подробной информации, пожалуйста, смотрите:
Создание связанных серверов (SQL Server Database Engine) - SQL Server | Microsoft Docs[^]


phil.o

5-ка!

Maciej Los

Спасибо, Фил.

ZurdoDev

На самом деле это выглядит так, как будто они пытаются обновить поля в 2 разных таблицах с помощью одного и того же оператора update. Насколько я знаю, это невозможно.

mbTbl.Status=erpTbl.[Статус],...,erpTbl.IsSent=1

Aitzaz Ahsan

да я пытаюсь обновить два поля таблицы с помощью одного запроса

Maciej Los

Таким образом, вы не можете обновить 2 таблицы в одном sql-запросе. Зурдодев прав.

Рейтинг:
2

ZurdoDev

Как уже упоминалось в комментариях, оператор update будет обновлять только 1 таблицу за один раз. Следовательно

Update table SET field = value


Вам нужно будет сделать 2 различных оператора обновления.

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

Кроме того, вы, вероятно, должны сделать это в транзакции, чтобы в случае сбоя одного обновления откатывались оба.


Maciej Los

5ed!