Ich habe eine Tabelle, die bestimmten Benutzern Rollen zuweist. Ich tue Massenaktualisierung zu dieser Tabelle, wo ich am Ende einige vorherige Rollen von Benutzern verabrede und danach die Zuweisung neuer Rollen durch Einfügen in diese Tabelle beende.IF EXISTS dann Update sonst nichts tun - SQL SERVER 2012
Ich mache beide diese Aktionen separat. Für meine erste Aktion geht mein Code so.
UPDATE userrolelist
SET effectiveend = '2016-01-20 00:00:00.000'
where userid IN ('150920','160847','160848','160849')
and roleid = '1037' and effectiveend IS NULL
Dies funktioniert, wenn kein Enddatum dieser Rolle zugewiesen ist, aber wenn es ein Enddatum für noch 1 Benutzer ist die gesamte Update-Anweisung beendet. Ich möchte eine IF EXISTS-Anweisung verwenden, um zuerst zu überprüfen, ob ein Enddatum für diesen Benutzer und diese Rolle existiert, wenn nicht, dann führe das Update sonst nichts aus.
Das Einfügen ist ähnlich. Ich führe 100 Einfügungen basierend auf dem Benutzer durch, die neue Rollen haben müssen. Nun, wenn ich diese Insert-Anweisungen erneut ausfühle, wenn es irgendwelche Duplikate findet, wird es fehlerhaft.
Insert into userrolelist (Userid, Roleid, IsDefault, EffectiveStart,
EffectiveEnd, Clientid, LastmodifiedUserId, LastmodifiedTimestamp)
Values
(161514,1011,1,'2016-01-21 00:00:00.001',Null,16785,0,'2016-01-21
00:00:00.001')
Tabellenstruktur:
Das ist sehr seltsam scheint. Die Tatsache, dass Sie Datensätze haben, die nicht zu den Bedingungen in der where-Klausel passen, sollte die Aktualisierung der Datensätze nicht beeinflussen, die passt. –
Ja - bitte klären Sie, welche Datensätze Sie aktualisieren möchten. Der Code, den du gepostet hast, sollte funktionieren. Was versuchst du (im Detail) zu erreichen? –
@ ZoharPeled- Also im Grunde, wie ich schon sagte, ich versuche MASS Update/Enddatum Rollen und dann neue Rollen von einigen Benutzern einfügen. Jetzt ist das Problem hier für einige Benutzer HR möglicherweise von der FRONT END gegangen und manuell die Aktion ausgeführt wurde. Wenn ich versuche, das UPDATE und dann das INSERT SCRIPT auszuführen, und wenn einige Mitarbeiter übereinstimmen, die bereits geändert wurden, wird die gesamte UPDATE- und INSERT-Anweisung beendet. –