2012-03-14 5 views
4

nullable 필드가있는 준비 테이블 (SQL Server 2008에서)이 있습니다.
스테이징 테이블의 레코드를 메인 테이블에 삽입하거나 업데이트하려고합니다. 이 기간 동안
나는 내 삽입 및 업데이트 문에서 위의 조건을 포함 할 수 있습니다 어떻게 비교가 삽입 및 업데이트 문에서 if/else 사용

Update main 
set main.field1 = (
if(staging.field1 isnull) 
    then ---- 
else if(staging.field2 isnull) 
    then ---- 
else 
    then 
) 

을 할 싶어?

답변

10

(일종의) 상당 CASE 표현을 사용하는 것입니다 : 내가 .. 조건이 우선적으로해야합니다 언급하는 것을 잊었다

UPDATE main 
SET main.field1 = 
    CASE 
    WHEN staging.field1 IS NULL 
     THEN -- 
    WHEN staging.field2 IS NULL 
     THEN -- 
    ELSE -- 
    END; 
+0

죄송합니다. – Kamil

+0

* 우선 순위 *는 사용자가 나열한 순서대로입니다. 따라서이 예제에서 우선 순위는'field1' 표현식 다음에'field2'가옵니다. 첫 번째 정규 표현식은 'main.field1'에 값이 할당 된 표현식입니다. – Yuck

0
MERGE INTO main 
    USING staging 
     ON main.id = staging.id 
WHEN MATCHED THEN 
    UPDATE 
     SET field1 = COALESCE(staging.field1 , main.field1), 
     SET field2 = COALESCE(staging.field2 , main.field2), 
     ... ;