Cómo combinar la asignación de variables con datos de las operaciones de recuperación en T-SQL

Solo para aclarar, soy de Sybase 12.5.3, pero estoy llevan a creer que esto es cierto para SQL Server 2005 también. Básicamente, estoy tratando de escribir una consulta que se parece un poco a esto, he simplificado tanto como sea posible para destacar 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 instrucción SELECT que asigna un valor a una variable no debe ser combinado con los datos de las operaciones de recuperación.»

La única solución que tengo para este tan lejos, es la inserción de la derivada-datos de la tabla en una tabla temporal y, a continuación, seleccione de nuevo de nuevo. Que funciona bien, pero el hecho de que esto no funciona me molesta. Hay una manera mejor de hacer esto?

  • Mismo mensaje de error se produce por la MSSQL!!!
InformationsquelleAutor ninesided | 2008-10-27

2 Kommentare

  1. 2

    El error no aparece, como se describe en 12.5.3 esd 4 & 7, funciona muy bien en 12.5.4 esd 4 & 6.

    Parece un error que ha sido parcheado, su única opción parece ser la solución o parche.

    Han encontrado lo que parece ser el error 377625

  2. 1

    Acabo de ejecutar su código en contra de 12.5.3 y analiza bien…no devuelve nada, pero de que se ejecuta. Tiene usted tal vez simplificado el problema un poco demasiado, porque yo no estoy viendo los mensajes de error en todos.

    Sólo para ser claros, el siguiente se ejecuta y devuelve lo que usted esperaría.

    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
    • Acabo de tomar un vistazo a @@versión y estamos sentados en: Adaptive Server Enterprise/12.5.3/EBF 13332 ESD#7/P/Linux Intel/Enterprise Linux/ase1253/1951/32-bits/OPT/Vie Mar 24 00:40:52 2006

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea