Ich habe diesen SQL Server-Code. Alles funktioniert, außer dupliziert Zeilen mit gleichen RightsId
und UserId
. Die Klausel where not exists
funktioniert nicht. Jede Hilfe wird geschätzt.einfügen in auswählen von inneren Join wo nicht existiert
INSERT INTO dbo.UserAccessRights (Id, UserId, RightType, RightsId, CreatedOn, CreatedBy)
SELECT DISTINCT
NEWID(),
@changedUserId,
N'Process ' + @rightsTypeSuffix,
ptm.ProcessInstance_id,
getdate(),
@loggedInUserId
FROM
dbo.ProcessTeamMembers ptm WITH (NOLOCK)
INNER JOIN
dbo.Users u WITH (NOLOCK) ON ptm.TeamMemberProfile_id = u.ProfileID
AND u.Id = @changedUserId
AND ptm.TenantId = @tenantId
INNER JOIN
dbo.ProcessInstances p_i WITH (NOLOCK) ON p_i.Id = ptm.ProcessInstance_id
AND p_i.DeletedOn IS NULL
WHERE
NOT EXISTS (SELECT *
FROM UserAccessRights uar WITH (NOLOCK)
WHERE uar.UserId = @changedUserId
AND uar.RightsId = ptm.ProcessInstance_id)
Set [Schlechte Angewohnheiten, NOLOCK überall hinzuschieben] (http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/) - es ist * nicht zu empfehlen *, dies überall zu verwenden - ganz und gar Gegenteil! –
Also ist das (NOLOCK) das Problem mit den Duplikaten? –