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