В моей установке SQL Server 2008 R2 он просто не компилируется. Парсер жалуется на неправильный синтаксис около =
.
Я полагаю, что это должно иметь какое-то отношение к смешиванию присваивания значений и извлечению данных в одном операторе SELECT, что недопустимо в SQL Server: вы можете иметь и то, и другое. Поскольку, когда вы присваиваете значения, набор строк не возвращается, а предикат EXISTS ожидает, что он будет , назначение не может быть разрешено в этом контексте, поэтому, чтобы избежать путаницы, возможно, ограничение должно быть наложено явно.
Ваш обходной путь, о котором вы говорите в комментарии, является достойным, но может не сработать где-то в середине пакета, когда переменная уже получила значение перед присваиванием. Таким образом, я бы, вероятно, использовал этот обходной путь вместо:
SELECT @myvar = ...
IF @@ROWCOUNT > 0 ...
Согласно MSDN , системная функция @@ROWCOUNT
возвращает количество строк, прочитанных запросом.