Можете ли вы обновить с помощью оператора LIKE в JOIN с TSQL? - PullRequest
2 голосов
/ 27 февраля 2009

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

Примечание. При этом будут обновлены все записи = имя работодателя, но все, что-то вроде 'foo%', не будет обновлено

UPDATE UnitOfWork
SET EmployerId = SG.EmployerId
FROM UnitOfWork UO    
LEFT JOIN SpecialtyGroup SG ON SG.Name LIKE UO.EmployerName + '%'
WHERE SG.EmployerId IS NOT NULL

Можно ли сделать LIKE таким образом или мне нужно сделать другое обновление вне этого объединения?

Ответы [ 2 ]

3 голосов
/ 27 февраля 2009

Для MS SQL 2008:

MERGE
UnitOfWork UO
USING SpecialtyGroup SG
   ON SG.Name LIKE UO.EmployerName + '%'
WHEN MATCHED THEN
   UPDATE
   SET UO.EmployerId = SG.EmployerId

Для MS SQL 2005:

WITH so AS
(
  SELECT UO.EmployerID, SG.EmployerID AS newEmployerID
  FROM UnitOfWork UO    
  LEFT JOIN SpecialtyGroup SG ON SG.Name LIKE UO.EmployerName + '%'
  WHERE SG.EmployerId IS NOT NULL
) 
UPDATE so
SET EmployerId = newEmployerID
0 голосов
/ 08 апреля 2014

При использовании LIKE в JOIN обычно меня привлекают типы данных CHAR. Перед добавлением%

не забудьте выполнить RTRIM.
...