ich überprüfen müssen, ob es ein vorhandener Datensatz in einer Tabelle (für einen Mitarbeiter Auswertung). Wenn ein solcher Datensatz existiert, muss die Abfrage den neuesten Eintrag für diesen Mitarbeiter erfassen und das nächste Startdatum und Enddatum für die nächste Auswertung berechnen. Wenn ein solcher Datensatz nicht existiert, muss die Abfrage eine andere Logik anwenden und ein neues Start- und Enddatum für die erste Auswertung berechnen (vom aktuellen Datum zurückzählen).SQL Server - IF EXISTS ausführt, sowohl den TRUE-Zweig und den falschen Zweig
Um dies zu tun, habe ich den Ausdruck IF EXISTS in SQL Server, aber es schien, dass, wenn ich den gleichen Namen für die Startdatum und Enddatum Variablen behielt, SQL sie überschreiben würde (also die Verzweigungen sequentiell ausgeführt wurde) , nicht den einen oder anderen auswählend). Also habe ich 2 Gruppen von Variablen deklariert, um dieses Problem zu lösen. SQL Server scheint jedoch weiterhin ein Startdatum und ein Enddatum für jeden Fall zu berechnen (EXISTS und NOT EXISTS). Ich weiß das, weil ich es gebeten habe, die 4 Variablen zu drucken, und alle wurden mit unterschiedlichen Werten gedruckt. Hier
ist die Erklärung meiner (jetzt) 4 Variablen:
IF EXISTS (SELECT main.[login]
FROM dbo.EVALUATIONS_TABLE eval
WHERE eval.[login] = @login)
SET @startdate = DATEADD(day, 1, (SELECT END_DATE FROM (SELECT TOP 1 ID, END_DATE FROM dbo.EVALUATIONS_TABLE WHERE [LOGIN] = @login) lastscorecard));
SET @enddate = DATEADD(day, 10, @startdate);
ELSE
SET @startdate_new = DATEADD(day, -1, GETDATE());
SET @enddate_new = DATEADD(day, -10, @startdate_new);
Ich habe versucht, den einen oder anderen Satz von Variablen in der Ausgabetabelle Variable einfügen, aber ich hatte immer noch auf dem gleichen verlassen IF EXISTS Logik, die unzuverlässig ist, wie wir oben gesehen haben. Was ist der Grund, warum SQL Server so verwirrt wird? Ich bin offen meine gesamte Logik zu überdenken, um :-)
Ihr Code-Schnipsel sollte einen Fehler auf "else" bekommen, es sei denn, dies ist in einem anderen 'if'-Block eingeschlossen. –