SQL T-SQL While Schleife funktioniert nicht wie sie soll

Zhen

Lt. Junior Grade
Registriert
Aug. 2009
Beiträge
299
Hallo lieber CBler,
schon eine Weile her, dass ich hier nach Hilfe gefragt habe... :D

Ich hab ein kleines Problem, ich schreibe gerade ein SQL-Script in Microsoft SQL Server Management Studio. Als Server auf dem es ausgeführt wird kommt der "Microsoft SQL Server 2008" zum Einsatz.

Das hier ist jetzt mal ein Ausschnitt aus meinem Script:

PHP:
DECLARE @panum		AS VARCHAR(max);

DECLARE @plStartDat      AS VARCHAR(20);
DECLARE @plEndDat	AS VARCHAR(20);

DECLARE @min_date	as varchar(20);
DECLARE @min_time	as varchar(20);

DECLARE @preVal		AS varchar(20);
DECLARE @newVal		AS varchar(20);

...

SET @plStartDat = null;

WHILE ( @plStartDat = null )
BEGIN
	PRINT 'While-Schleife begonnen';

	/*	kleinstes Datum und Zeit speichern	*/
	SELECT @min_date = MIN( U_Date ) FROM #times_vals WHERE U_FieldKey = 'StartDate';
	SELECT @min_time = MIN( U_Time ) FROM #times_vals WHERE U_FieldKey = 'StartDate' AND U_Date = @min_date;

	/*	vorherigen und neuen Änderungswert speichern	 */
	SELECT @preVal = U_PreValue, @newVal = U_NewValue FROM #pps_times_vals WHERE U_FieldKey = 'StartDate' AND U_Date = @min_date AND U_Time = @min_time;

	/*	prüfen ob preVal ein gültiges Datum ist und nicht kleiner als das Erstellungsdatum	*/
	IF ( @preVal = null ) OR ( @preVal = '' ) OR ( @preVal = '00.00.0000' ) OR ( @preVal < @createDate )
		BEGIN
		PRINT '1. IF';
			IF ( @newVal <> null ) AND ( @newVal <> '' ) AND ( @newVal <> '00.00.0000' ) AND ( @newVal >= @createDate )
				BEGIN
					PRINT '2. IF';
					SELECT @plStartDat = U_newValue FROM #pps_times_vals WHERE U_FieldKey = 'StartDate' AND U_Date = @min_date AND U_Time = @min_time;
					BREAK;
				END
			ELSE
				BEGIN
					PRINT 'ELSE vom 2. IF';
					DELETE FROM #pps_times_vals WHERE U_FieldKey = 'StartDate' AND U_Date = @min_date AND U_Time = @min_time;
				END
		END
	ELSE
		BEGIN
			PRINT 'ELSE vom 1. IF';
			SELECT @plStartDat = U_PreValue FROM #pps_times_vals WHERE U_FieldKey = 'StartDate' AND U_Date = @min_date AND U_Time = @min_time;
			BREAK;
		END
END

...


Und nun das Problem: ich kann da tun und lassen was ich will, aber das Script springt nicht in die WHILE-Schleife rein. Wenn ich aber 1=1 angebe, dann kommts schon rein (hängt sich aber selbstverständlich auf da es endlos weiter geht - hier funktionieren die IF Abfragen noch nicht korrekt)

Hoffe ihr könnt mir weiterhelfen und bedanke mich schon mal vielmals :)
Ergänzung ()

Okay hat sich erledigt... ich verstehe zwar immernoch nicht warum die While-Schleife @variable = null nicht schluckt, aber @variable = '' hat es kapiert.

Vielleicht kann mich hier ja mal jemand aufklären, da (T-)SQL nicht unbedingt mein Fachgebiet ist.
 
Ist zwar schon ein Weilchen her, dass ich was mit T-SQL geschrieben habe, aber ich habe in Erinnerung, dass man nicht einfach mit null vergleichen kann. Dafür gibt es IS NULL bzw. IS NOT NULL.

Deine Schleifenbedingung sollte also sein:
Code:
WHILE ( @plStartDat IS NULL )
 
IS NULL ist was anderes wie = ''
und =NULL ist falsch.
 
Zuletzt bearbeitet:
Danke für eure Hilfe.

Hab es gerade mit "@plStartDat IS NULL" probiert und das funktioniert ebenfalls. Darauf muss man erstmal kommen :D
Ich dachte "xxx = null" würde auch funktionieren.
 
Zurück
Oben