Странный синтаксис ОБНОВЛЕНИЯ в MS Access 2003 - PullRequest
0 голосов
/ 21 декабря 2010

У меня есть приложение Access с запросом на обновление со следующим синтаксисом:

UPDATE TABLE1, TABLE2 SET 
TABLE2.VALUE1 = TABLE1.VALUE1, 
TABLE2.VALUE2 = TABLE1.VALUE2, 
TABLE2.VALUE3 = TABLE1.VALUE3, 
TABLE2.VALUE4 = TABLE1.VALUE4

Запрос работает, но я не понимаю, что здесь происходит. Я пытаюсь преобразовать этот запрос в SQL Server. Может кто-нибудь объяснить, что делает этот запрос? Я предполагаю, что это специальный синтаксис Access.

Спасибо, Свен

Ответы [ 3 ]

5 голосов
/ 21 декабря 2010

Используется более старый неявный синтаксис JOIN, хотя SQL Server должен понимать и этот синтаксис.

Это ВНУТРЕННЕЕ СОЕДИНЕНИЕ таблиц1 и таблиц2, а затем перемещение значений из таблиц1 в таблицу2.Из-за отсутствия условий JOIN, если table1 имеет более 1 строки, это может привести к непредсказуемым результатам.

По сути это:

 UPDATE Table1 INNER JOIN Table2 <<ON Missing Conditions Here>>
   SET Table2.Value1 = Table1.Value1
       Table2.Value2 = Table1.Value2
       Table2.Value3 = Table1.Value3
       Table2.Value4 = Table1.Value4

Вы можете преобразовать это в SQL Server с помощью чего-то вродеэто:

 UPDATE Table2
   SET Table2.Value1 = Table1.Value1
       Table2.Value2 = Table1.Value2
       Table2.Value3 = Table1.Value3
       Table2.Value4 = Table1.Value4
   FROM Table1 INNER JOIN Table2 <<ON Missing Conditions Here>>
0 голосов
/ 22 декабря 2010

Старайтесь избегать синтаксиса «ОБНОВЛЕНИЕ с объединением» в SQL Server.Это совершенно нестандартный SQL, но, если серьезно, он дает непредсказуемые результаты без каких-либо ошибок или предупреждений, если критерии объединения не верны.Вместо этого используйте оператор MERGE или используйте стандартную версию оператора UPDATE (с подзапросом), если можете.

0 голосов
/ 21 декабря 2010

Каждое поле из TABLE2 будет переопределять соответствующее поле из TABLE1 с записями из TABLE1 по одной. Результатом будет TABLE2 со всеми замененными записями последней строкой из TABLE1. Если в TABLE1 нет записей - никаких изменений не происходит. Извините за мой английский. И ... это SQL.

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