Попытка сопоставления обновления таблицы SQL на строковом поле - PullRequest
0 голосов
/ 21 октября 2011

Может действительно помочь с запросом на обновление ... (SQL Serer 2008 R2 Express) У меня есть две таблицы: tblJP и tblMaster.

У меня только строковое поле, совпадающее междудве таблицы.

tblJP AND tblMaster

Мне нужно обновить tblJP.LangString с tblMaster.Long_text, когда

tblJP.short_text = tblMaster.short_text AND tblMaster.Lang = 'jp'

Любая помощь будет принята с благодарностью.Я вращаю свои колеса, пробуя всевозможную логику и синтаксис, от создания временных таблиц до других типов объединений, но все безуспешно.

Ответы [ 2 ]

6 голосов
/ 21 октября 2011

Простое обновление с INNER JOIN должно помочь.

UPDATE     tblJP
SET        tblJP.LangString = tblMaster.Long_Text
FROM       tblJP
INNER JOIN tblMaster ON tblMaster.alt_text = tblJP.short_text
WHERE      tblMaster.Lang = 'jp'

ПРЕДУПРЕЖДЕНИЕ: Никогда не запускайте оператор обновления для вашего производственного сервера, не предварительно проверив его на сервере разработки - особенно когда кто-то другой написал SQL.

1 голос
/ 21 октября 2011

Вы также можете использовать MERGE

MERGE INTO tblJP
USING (SELECT *
       FROM   tblMaster
       WHERE  Lang = 'jp') AS SOURCE
ON SOURCE.alt_text = tblJP.short_text
WHEN MATCHED THEN
  UPDATE SET LangString = SOURCE.Long_Text;  

В случае, если JOIN возвращает несколько строк, вы будете предупреждены о проблеме с ошибкой The MERGE statement attempted to UPDATE or DELETE the same row more than once.

...