Сделать запрос вставки идемпотентным - SQL Server - PullRequest
0 голосов
/ 01 октября 2019

Кто-нибудь знает, как я могу сделать этот запрос идемпотентным, т. Е. Если бы он выполнялся более одного раза, он не вставил бы ни одной повторяющейся записи

    INSERT INTO MyAuthDb..AspNetUserClaims ( UserId, ClaimType, ClaimValue )
SELECT c.UserId, 'givenname', c.FirstName
FROM MyOtherDb..Contact c
INNER JOIN
    (SELECT UserId, MAX(CreatedOn) AS MaxDate
    FROM MyOtherDb..Contact
    GROUP BY UserId) c1
ON c.UserId = c1.UserId 
INNER JOIN MyAuthDb..AspNetUsers u ON c.UserId = u.Id
AND c.CreatedOn = c1.MaxDate

1 Ответ

2 голосов
/ 01 октября 2019

Используйте NOT EXISTS.

INSERT INTO MyAuthDb..AspNetUserClaims ( UserId, ClaimType, ClaimValue )

SELECT c.UserId, 'givenname', c.FirstName
FROM MyOtherDb..Contact c
INNER JOIN
    (SELECT UserId, MAX(CreatedOn) AS MaxDate
    FROM MyOtherDb..Contact
    GROUP BY UserId) c1
ON c.UserId = c1.UserId 
INNER JOIN MyAuthDb..AspNetUsers u ON c.UserId = u.Id
AND c.CreatedOn = c1.MaxDate
WHERE NOT EXISTS (SELECT 1 FROM MyAuthDb..AspNetUserClaims A 
WHERE A.UserId = c.UserId AND A.ClaimType = 'givenname' AND A.ClaimValue = c.FirstName )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...