En mi instalación de SQL Server 2008 R2, simplemente no se compila. El analizador se queja de una sintaxis incorrecta cerca del =
.
Creo que debe tener algo que ver con la asignación de valores de mezcla y la recuperación de datos en una sola instrucción SELECT, que no está permitida en SQL Server: puede tener uno u otro. Dado que, cuando se asignan valores, el conjunto de filas no se devuelve pero el predicado EXISTS espera que sea, la asignación no se puede permitir en ese contexto, por lo tanto, para evitar confusiones, tal vez la limitación se debe haber impuesto explícitamente.
Su solución, de la que está hablando en un comentario, es decente, pero podría no funcionar bien en el medio de un lote cuando la variable ya tiene un valor antes de la asignación. Así que probablemente utilice esta solución en su lugar:
SELECT @myvar = ...
IF @@ROWCOUNT > 0 ...
As per MSDN, la función del sistema @@ROWCOUNT
devuelve el número de filas leídas por la consulta.
Ok mi solución más simple que utilizo es @myvar SELECT = .... y luego hacer un IF (@myvar <> null) . Esto resuelve mi problema e incluso lo hace más lógico, pero aún estoy interesado en saber si puedo asignarlo. –
Supongo que no, dado que la instrucción de asignación no devuelve un valor booleano que satisfaga IF EXISTS – Sparky