Nielogiczne działanie IF

0

Cześć, napisałem sobie skrypt konwertujący bazę danych do nowej wersji. Logika jest taka. Jeśli aktualna wersja to 4.0, wykonaj taki i taki skrypt. I co się okazuje.

 
declare @dbVer float
SET @dbVer = 4.1
if @dbVer = 4.0
  print '4.0'
else
  print '4.1'	

kod prosty. I działający. Widzę komunikat 4.1
Ale jeśli zrobię tak:

declare @dbVer float
  SET @dbVer = 4.1
  if @dbVer = 4.0	
  update individual_calendars SET
	beginFrom = dateadd(yy, 70, beginFrom), 
	beginTo = dateadd(yy, 70, beginTo),
	endFrom = dateadd(yy, 70, endFrom),
	endTo = dateadd(yy, 70, endTo)

to wykonuje się UPDATE. Damn it, czemu??

0

E tam coś kręcisz, mi się nie wykonuje.

0

@Patryk27 - chodzi o MSSQL, a nie MySQL

MiL napisał(a)

E tam coś kręcisz, mi się nie wykonuje.

no mi się własnie wykonuje. MSSQL 2008. Powiem więcej. Nie jest ważne, co wpiszę w warunku. Mogę nawet: if @dbVer = 'bla' i tak się wykonuje :|

0

coś kombinujesz. wykonałem zapytanie w dwóch wersjach (SQL Server 2008R2):

DECLARE @dbVer FLOAT = 4.1;
IF @dbVer = 4.0
	UPDATE Lib_Playlists SET ClientId = 1 where ClientId = 1

Command(s) completed successfully.

DECLARE @dbVer FLOAT = 4.0;
IF @dbVer = 4.0
	UPDATE Lib_Playlists SET ClientId = 1 where ClientId = 1

(18 row(s) affected)

Jak znam życie masz błąd w zupełnie innym miejscu, np. działasz na starej wersji procedury, albo wykonuje się inny warunek w innym miejscu.

0
ŁF napisał(a)

coś kombinujesz. wykonałem zapytanie w dwóch wersjach (SQL Server 2008R2):

DECLARE @dbVer FLOAT = 4.1;
IF @dbVer = 4.0
	UPDATE Lib_Playlists SET ClientId = 1 where ClientId = 1

Command(s) completed successfully.

DECLARE @dbVer FLOAT = 4.0;
IF @dbVer = 4.0
	UPDATE Lib_Playlists SET ClientId = 1 where ClientId = 1

(18 row(s) affected)

Jak znam życie masz błąd w zupełnie innym miejscu, np. działasz na starej wersji procedury, albo wykonuje się inny warunek w innym miejscu.

To by było normalne. Ale wykonuję powyższy kod. Bez niczego dodatkowego. Zrobiłem to dla testu, bo nie wiedziałem, gdzie jest błąd. I się okazało, że coś z tym ifem :|

0

więc wykonałem taki sam kod u siebie, tylko zmieniłem tabelkę. zadziałał prawidłowo. sam widzisz: jest if, jest porównanie, jest update, raz się wykonuje, a raz nie, bo raz warunek jest spełniony, a raz nie.
z pomysłów, które raczej nic nie zmienią: zamknij kod warunku w bloku begin/end, dodaj średniki, pozbądź się nadmiarowego set (od 2008 możesz nadawać wartość od razu w declare) itp.

nie mów mi, że znalazłeś banalny błąd w dziesiątej wersji serwera używanej przez setki tysięcy ludzi. brzytwa Ockhama wskazuje, że błąd leży po Twojej stronie.

0
ŁF napisał(a)

więc wykonałem taki sam kod u siebie, tylko zmieniłem tabelkę. zadziałał prawidłowo. sam widzisz: jest if, jest porównanie, jest update, raz się wykonuje, a raz nie, bo raz warunek jest spełniony, a raz nie.
z pomysłów, które raczej nic nie zmienią: zamknij kod warunku w bloku begin/end, dodaj średniki, pozbądź się nadmiarowego set (od 2008 możesz nadawać wartość od razu w declare) itp.

Próbowałem. Ponadto musi również działać na 2005 ;)

nie mów mi, że znalazłeś banalny błąd w dziesiątej wersji serwera używanej przez setki tysięcy ludzi. brzytwa Ockhama wskazuje, że błąd leży po Twojej stronie.

Ja już nie wiem, co mam o tym myśleć. Kod z pierwszego postu(ten z Update) nie działa w robocie na dwóch różnych komputerach. Na jednym jest MSSQL 2005 Express, na drugim 2008(też wersja darmowa). Natomiast u mnie w domu na 2005(wersja pełna) działa ok. Jakby się ktoś czepiał, to wersję pełną mam z MSDN

@ŁF: OK, chodziło mi o wersję pełną.

1 użytkowników online, w tym zalogowanych: 0, gości: 1