[Sql-server] Обновить таблицу с помощью JOIN в SQL Server?


Answers

Попробуйте вот так:

begin tran
    UPDATE a 
    SET a.CalculatedColumn= b.[Calculated Column]
    FROM table1 a INNER JOIN table2 b ON a.commonfield = b.[common field] 
    WHERE a.BatchNO = '110'
commit tran

(изменить: darn typos!)

Question

Я хочу обновить столбец в таблице, создав соединение в другой таблице, например:

UPDATE table1 a 
INNER JOIN table2 b ON a.commonfield = b.[common field] 
SET a.CalculatedColumn= b.[Calculated Column]
WHERE 
    b.[common field]= a.commonfield
AND a.BatchNO = '110'

Но он жалуется:

Msg 170, уровень 15, состояние 1, строка 2
Строка 2: неправильный синтаксис рядом с 'a'.

Что здесь не так?




MERGE table1 T
   USING table2 S
      ON T.CommonField = S."Common Field"
         AND T.BatchNo = '110'
WHEN MATCHED THEN
   UPDATE
      SET CalculatedColumn = S."Calculated Column";






Другим подходом было бы использование MERGE

  ;WITH cteTable1(CalculatedColumn, CommonField)
  AS
  (
    select CalculatedColumn, CommonField from Table1 Where BatchNo = '110'
  )
  MERGE cteTable1 AS target
    USING (select "Calculated Column", "Common Field" FROM dbo.Table2) AS source ("Calculated Column", "Common Field")
    ON (target.CommonField = source."Common Field")
    WHEN MATCHED THEN 
        UPDATE SET target.CalculatedColumn = source."Calculated Column";

-Merge является частью стандарта SQL

-Также я уверен, что внутренние обновления присоединения не являются детерминированными .. Аналогичный вопрос здесь, где ответ рассказывает об этом http://ask.sqlservercentral.com/questions/19089/updating-two-tables-using-single-query.html