2013-08-14 2 views
1

Я ищу способ объединения этих двух операторов в один на SQL-сервере. Я пробовал искать «условное соединение», но не видел этого точного примера. Спасибо за помощь.Обновление сервера Sql с условным соединением

update 
    employees 
set 
    employees.RefID = ed.RefID 
from 
    #tmpEmployees employees 
    inner join EmployeeDirectory ed on ed.ABC = employees.ABC 
where 
    (nullif(ed.ABC, '') is not null and nullif(employees.ABC, '') is not null) 



update 
    employees 
set 
    employees.RefID = ed.RefID 
from 
    #tmpEmployees employees 
    inner join EmployeeDirectory ed on ed.DEF = employees.DEF 
where 
    (nullif(ed.DEF, '') is not null and nullif(employees.DEF, '') is not null) 
+0

После долгих испытаний, я решил на торчащие с отдельными операторами обновлений. Это решение работает быстрее всего. Спасибо всем за ваши отзывы. Я продолжу следить за этим постом за другими идеями. – user2584854

ответ

0

Я не уверен, я полностью понимаю, что вы пытаетесь достичь, но, возможно, следующее поможет:

UPDATE 
    employees 
SET 
    employees.RefID = ed.RefID 
FROM 
    #tmpEmployees employees 
JOIN EmployeeDirectory ed 
    ON ed.ABC = employees.ABC OR 
    ed.ABC IS NULL AND employees.ABC IS NULL OR 
    ed.DEF = employees.DEF OR 
    ed.DEF IS NULL AND employees.DEF IS NULL 

Если обработка NULL значение не то, что вы хотите (или противоположность что вы хотите), вы можете изменить/инвертировать его.

0

Попробуйте

UPDATE e 
    SET e.RefID = d.RefID 
    FROM #tmpEmployees e JOIN EmployeeDirectory d 
    ON e.ABC = d.ABC OR e.DEF = d.DEF 
WHERE NULLIF(e.ABC, '') IS NOT NULL 
    AND NULLIF(d.ABC, '') IS NOT NULL 
    AND NULLIF(d.DEF, '') IS NOT NULL 
    AND NULLIF(e.DEF, '') IS NOT NULL 

или

UPDATE e 
    SET e.RefID = COALEASCE(d1.RefID, d2.RefID) 
    FROM #tmpEmployees e LEFT JOIN EmployeeDirectory d1 
    ON e.ABC = d1.ABC LEFT JOIN EmployeeDirectory d2 
    ON e.DEF = d2.DEF 
+0

Спасибо за ваш ввод, но это соответствует только всем идентификаторам (ABC и DEF). Мне нужно, чтобы он соответствовал, если либо заданы совпадения. Изменяет условия AND на OR в предложении where, что заставляет вещи работать намного медленнее, чем исходная запись отдельных операторов обновления. – user2584854

+0

@ user2584854 См. Обновленный ответ для еще одной опции – peterm

+0

@ user2584854 Помогло ли это? – peterm

Смежные вопросы