Можете ли вы выполнить обновление с помощью оператора LIKE в JOIN с TSQL?

Я выполняю большой импорт из файла с разделителями-запятыми и хочу найти идентификатор работодателя во время sproc, который выполняется в конце процесса импорта. Проблема, с которой я столкнулся, заключается в том, что мой 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)

Для 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

То, что обычно улавливает меня при использовании LIKE в JOIN, - это типы данных CHAR, вам нужно не забыть выполнить RTRIM, прежде чем добавлять%