使插入查询幂等-SQL Server

时间:2019-10-01 14:24:21

标签: sql sql-server

任何人都知道我如何使该查询成为幂等,即,如果多次执行该查询,则不会插入任何重复的记录

    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 个答案:

答案 0 :(得分:2)

使用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 )