Cómo combinar la asignación de variables con las operaciones de recuperación de datos en T-SQL
-
04-07-2019 - |
Pregunta
Solo para aclarar, estoy ejecutando Sybase 12.5.3, pero creo que esto también es válido para SQL Server 2005. Básicamente, estoy intentando escribir una consulta que se parece un poco a esto, lo simplifiqué lo más posible para resaltar el problema:
DECLARE @a int, @b int, @c int
SELECT
@a = huzzah.a
,@b = huzzah.b
,@c = huzzah.c
FROM (
SELECT
1 a
,2 b
,3 c
) huzzah
Esta consulta me da el siguiente error: " Error: 141 Una declaración SELECT que asigna un valor a una variable no debe combinarse con operaciones de recuperación de datos. "
La única solución alternativa que tengo para esto hasta ahora, es insertar los datos de la tabla derivada en una tabla temporal y luego volver a seleccionarla. Lo que funciona bien, pero el hecho de que esto no funcione me molesta. ¿Hay una mejor manera de hacer esto?
Solución
El error aparece como se describe en 12.5.3 esd 4 & amp; 7, funciona bien en 12.5.4 esd 4 y amp; 6.
Parece un error que ha sido parchado, tus únicas opciones parecen ser una solución o un parche.
He encontrado lo que parece ser el error 377625
Otros consejos
Acabo de ejecutar su código contra 12.5.3 y analiza bien ... no devuelve nada, pero sí funciona. Quizás hayas simplificado demasiado el problema porque no veo ningún mensaje de error.
Para ser claros, lo siguiente se ejecuta y devuelve lo que se espera.
DECLARE @a int, @b int, @c int
SELECT
@a = huzzah.a
,@b = huzzah.b
,@c = huzzah.c
FROM (
SELECT
1 a
,2 b
,3 c
) huzzah
select @a
select @b
select @c