SQL Server 一時テーブルで簡単な更新を行っています。3 つの別々のステートメントで 1 つの列を更新すると、一貫性のない結果が得られますが、1 つの SQL ステートメント内で同じ列を更新すると、期待どおりの結果が得られます。誰かが2つの違いを指摘してください。何か不足していますか?
SQLは次のとおりです。
CREATE TABLE #EmailChanges
(
OldEmail varchar(100),
NewEmail varchar(100)
)
INSERT INTO #EmailChanges(OldEmail)
VALUES
('no.body@ccc.abc.com'),
('foo.bar@abc.com'),
('any.body@xyz.com')
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
これにより、次の結果が得られました。
OldEmail NewEmail
--------------------- --------------------------
no.body@ccc.abc.com no.body@ccc.abc.com
foo.bar@abc.com foo.bar@new.domain.com
any.body@xyz.com any.body@xyz.com
何か案は?