2013-10-03 5 views
1

SQL Server 임시 테이블에서 간단한 업데이트를 수행하고 있습니다. 세 개의 별도 명령문을 사용하여 단일 열을 업데이트 할 때 일관성없는 결과가 발생하지만 단일 SQL 문에서 동일한 열을 업데이트 할 때 기대되는 결과를 얻을 수 있습니다. 제발 누군가가 둘 사이의 차이점을 지적 할 수 있습니다. 내가 놓친 게 있니?SQL Server 업데이트 열 결과가 일치하지 않습니다.

OldEmail    NewEmail 
--------------------- -------------------------- 
[email protected] [email protected] 
[email protected] [email protected] 
[email protected]  [email protected] 

어떤 아이디어 :

CREATE TABLE #EmailChanges 
(
    OldEmail varchar(100), 
    NewEmail varchar(100) 
) 

INSERT INTO #EmailChanges(OldEmail) 
VALUES 
('[email protected]'), 
('[email protected]'), 
('[email protected]') 

UPDATE #EmailChanges SET NewEmail = replace(OldEmail, '@ccc.abc.com', '@new.domain.com') 
UPDATE #EmailChanges SET NewEmail = replace(OldEmail, '@xyz.com', '@new.domain.com') 
UPDATE #EmailChanges SET NewEmail = replace(OldEmail, '@abc.com', '@new.domain.com') 

-- If I uncomment below sql and comment above three updates, I get desired output. 
-- UPDATE #EmailChanges SET NewEmail = replace(replace(replace(OldEmail, '@ccc.abc.com', '@new.domain.com'), '@xyz.com', '@new.domain.com'), '@abc.com', '@new.domain.com') 

SELECT * FROM #EmailChanges 

이 날 결과 다음과 기븐스 : 여기

는 SQL입니까?

답변

3

업데이트는 OldEmail의 값을 기반으로 모든 행에서 NewEmail의 값을 설정합니다. 세 번째 업데이트는 이전 두 업데이트를 덮어 씁니다.

그래서 처음 두 개는 무의미합니다. 그냥 실행하는 것과 같습니다.

UPDATE #EmailChanges SET NewEmail = replace(OldEmail, '@abc.com', '@new.domain.com') 

그리고 한 행만 변경됩니다. 별도 문의 경우

UPDATE #EmailChanges SET NewEmail = replace(OldEmail, '@ccc.abc.com', '@new.domain.com') 
UPDATE #EmailChanges SET NewEmail = replace(NewEmail, '@xyz.com', '@new.domain.com') 
UPDATE #EmailChanges SET NewEmail = replace(NewEmail, '@abc.com', '@new.domain.com') 
+0

감사 마틴을 사용할 수 있습니다 작동합니다! 바보 나! :( –

관련 문제