W mojej instalacji SQL Server 2008 R2 po prostu się nie kompiluje. Analizator składni narzeka na nieprawidłową składnię w pobliżu =
.
Wierzę, że musi mieć coś wspólnego z miksowaniem wartości i pobieraniem danych w pojedynczej instrukcji SELECT, która jest niedozwolona w SQL Server: możesz mieć jedną lub drugą. Ponieważ przy przypisywaniu wartości zestaw wierszy nie jest zwracany, ale predykat EXISTS oczekuje, że jest to zadanie niemożliwe, w celu uniknięcia niejasności ograniczenie to musiało zostać nałożone jawnie.
Twoje obejście, o którym mowa w komentarzu, jest przyzwoite, ale może nie działać dobrze w środku partii, gdy zmienna ma już wartość przed przypisaniem. Więc to pewnie użyć tego obejścia zamiast:
SELECT @myvar = ...
IF @@ROWCOUNT > 0 ...
As per MSDN funkcja systemu @@ROWCOUNT
zwraca liczbę wierszy czytanych przez zapytanie.
Ok mój prostsze obejście, które używam to SELECT @myvar = .... i potem zrobić IF (@myvar <> NULL) . To rozwiązuje mój problem, a nawet czyni go bardziej logicznym, ale nadal jestem zainteresowany, aby wiedzieć, czy mogę go przypisać. –
Zgaduję, że nie, ponieważ instrukcja przypisania nie zwraca wartości boolowskiej, która spełnia IF EXISTS – Sparky