Warunkowy INSERT/UPDATE z wykorzystaniem MERGE

Jeśli chce warunkowo wykonać operację INSERT lub UPDATE na tabeli, wówczas zamiast pisać logikę sprawdzającą, czy dany rekord istnieje i wykonać odpowiednią akcję, mogę wykorzystać polecenie MERGE. Poniżej przykład na tabeli Query. Jeśli w tabeli istnieje rekord o QueryId = 1 wówczas kolumna QueryNumber zostanie zaktualizowana, w przeciwnym wypadku, nowy wiersz zostanie dodany.

declare @QueryId tinyint
set @QueryId = 1

declare @QueryNumber nvarchar(20)
set @QueryNumber = 'Query Number'

MERGE dbo.Query as T
USING (SELECT @QueryId as QueryId, @QueryNumber as QueryNumber) as S
ON T.QueryId = S.QueryId
WHEN MATCHED THEN
    UPDATE SET T.QueryNumber = S.QueryNumber
WHEN NOT MATCHED BY TARGET THEN
    INSERT(QueryNumber) VALUES (S.QueryNumber);

Advertisements