Hallo zusammen,
der SQL Server 2008 zickt bei folgendem SELECT herum
Fehlermeldung: Meldung 536, Ebene 16, Status 1, Zeile 1
Invalid length parameter passed to the right function.
Auf dem SQL Server 2000 läuft es korrekt.
Man kann das Problem umgehen, wenn man eine temporäre Variable verwendet
Das Problem ist nur, dass ich diesen Kram in einem UPDATE (SET numer = ....) benötige, und da laufen DECLARE und BEGIN nicht drin.
Wie kriege ich das DECLARE und SET der Variable nun aber in ein UPDATE rein?
Und warum versucht der SQL Server 2008 einen Befehl auszuführen, obwohl er wegen CASE WHEN LEN('') > 4 gar nicht in den Ereigniszweig gehen dürfte?
Hat jemand einen Tipp?
Danke und Gruß
Volker
der SQL Server 2008 zickt bei folgendem SELECT herum
SELECT CASE WHEN LEN('') > 4 THEN
CASE WHEN LEFT('',5) = '+4949' THEN '0' + RIGHT('',LEN('')-5)
ELSE
CASE WHEN LEFT('',4) = '4949' THEN '0' + RIGHT('',LEN('')-4)
ELSE
CASE WHEN LEFT('',3) = '+49' THEN '0' + RIGHT('',LEN('')-3)
ELSE
CASE WHEN LEFT('',2) = '49' THEN '0' + RIGHT('',LEN('')-2)
ELSE ''
END
END
END
END
ELSE ''
END
CASE WHEN LEFT('',5) = '+4949' THEN '0' + RIGHT('',LEN('')-5)
ELSE
CASE WHEN LEFT('',4) = '4949' THEN '0' + RIGHT('',LEN('')-4)
ELSE
CASE WHEN LEFT('',3) = '+49' THEN '0' + RIGHT('',LEN('')-3)
ELSE
CASE WHEN LEFT('',2) = '49' THEN '0' + RIGHT('',LEN('')-2)
ELSE ''
END
END
END
END
ELSE ''
END
Invalid length parameter passed to the right function.
Auf dem SQL Server 2000 läuft es korrekt.
Man kann das Problem umgehen, wenn man eine temporäre Variable verwendet
DECLARE @laenge AS integer;
BEGIN
IF LEN('') > 4
BEGIN
IF LEFT('',5) = '+4949'
BEGIN
SET @laenge = 5;
SELECT '0' + RIGHT('',LEN('')-@laenge);
END
ELSE IF LEFT('',4) = '4949'
BEGIN
SET @laenge = 4;
SELECT '0' + RIGHT('',LEN('')-@laenge);
END
ELSE IF LEFT('',3) = '+49'
BEGIN
SET @laenge = 3;
SELECT '0' + RIGHT('',LEN('')-@laenge);
END
ELSE IF LEFT('',2) = '49'
BEGIN
SET @laenge = 2;
SELECT '0' + RIGHT('',LEN('')-@laenge);
END
ELSE
BEGIN
SELECT ''
END
END
ELSE
BEGIN
SELECT ''
END
END
BEGIN
IF LEN('') > 4
BEGIN
IF LEFT('',5) = '+4949'
BEGIN
SET @laenge = 5;
SELECT '0' + RIGHT('',LEN('')-@laenge);
END
ELSE IF LEFT('',4) = '4949'
BEGIN
SET @laenge = 4;
SELECT '0' + RIGHT('',LEN('')-@laenge);
END
ELSE IF LEFT('',3) = '+49'
BEGIN
SET @laenge = 3;
SELECT '0' + RIGHT('',LEN('')-@laenge);
END
ELSE IF LEFT('',2) = '49'
BEGIN
SET @laenge = 2;
SELECT '0' + RIGHT('',LEN('')-@laenge);
END
ELSE
BEGIN
SELECT ''
END
END
ELSE
BEGIN
SELECT ''
END
END
Wie kriege ich das DECLARE und SET der Variable nun aber in ein UPDATE rein?
Und warum versucht der SQL Server 2008 einen Befehl auszuführen, obwohl er wegen CASE WHEN LEN('') > 4 gar nicht in den Ereigniszweig gehen dürfte?
Hat jemand einen Tipp?
Danke und Gruß
Volker
Comment