none
La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión. RRS feed

  • Pregunta

  • Agradezco la ayuda que me puedan brindar con este mensaje, cuando realizo una subconsulta en un Select, que esta de la siguiente manera: 

    SELECT 
    PREGUNTA =
    (SELECT CRITEV FROM AD_CRITEV WHERE ID_C_EV = 1  UNION ALL SELECT B.PREGUNTA FROM AD_CRITEV A INNER JOIN AD_LISTPREG B ON A.ID_C_EV = B.CRITEV AND B.FORMEV = 2 WHERE B.CRITEV = 1 UNION ALL SELECT CRITEV FROM AD_CRITEV 
        WHERE ID_C_EV = 2  UNION ALL SELECT B.PREGUNTA FROM AD_CRITEV A INNER JOIN AD_LISTPREG B ON A.ID_C_EV = B.CRITEV AND B.FORMEV = 2 WHERE B.CRITEV = 2 UNION ALL SELECT CRITEV FROM AD_CRITEV WHERE ID_C_EV = 3 
        UNION ALL SELECT B.PREGUNTA FROM AD_CRITEV A INNER JOIN AD_LISTPREG B ON A.ID_C_EV = B.CRITEV AND B.FORMEV = 2 WHERE B.CRITEV = 3 UNION ALL SELECT CRITEV FROM AD_CRITEV WHERE ID_C_EV = 4  UNION ALL SELECT B.PREGUNTA 
        FROM AD_CRITEV A INNER JOIN AD_LISTPREG B ON A.ID_C_EV = B.CRITEV AND B.FORMEV = 2 WHERE B.CRITEV = 4)

    Todo lo que esta en la sub consulta, funciona de manera correcta, pero al encapsularlo, arroja el error. 

    viernes, 17 de enero de 2020 14:19

Todas las respuestas

  • Simple, la SUB-CONSULTA te esta regreando MAS de un valor

    IIslas Master Consultant SQL Server

    viernes, 17 de enero de 2020 15:16
  • Es lógico,  mi pregunta es que puede estar fallando, si no la encapsulo funciona correctamente
    viernes, 17 de enero de 2020 15:58
  • Pues nada, que si lanzas esas consultas con los mismos parametros te esta retornando mas de un valor, ademas que tienes varias UNION ALL y eso obviamente aumenta las posibiidades de ese tipo de errores, mira aqui este ejemplo que funciona sin problema

    DECLARE @MiTabla AS TABLE
    ( Id  INT);
    
    INSERT INTO @MiTabla (Id) VALUES (1),(2),(3);
    
    DECLARE @NumPregunta INT;
    SELECT @NumPregunta = (SELECT Id FROM @MiTabla WHERE Id = 1)
    
    SELECT @NumPregunta
    
    Asi que nada, revisa o restructura tu consulta para forzar a que nunca te retornme mas de una fila.


    "Oh, the wind, the wind is blowing,through the graves the wind is blowing,Freedom soon will come; then well come from the shadows".The Partisan(Leonard Cohen) Email: me[at]geohernandez.net Blog:www.geohernandez.net

    viernes, 17 de enero de 2020 16:06
  • Gracias, no había respondido antes, ya que en el trabajo estaba en otras cosas. intentare de esta forma y les cuento.
    lunes, 27 de enero de 2020 20:27
  • Hola CamBass:

    Para asegurarte que no te devuelva error, puedes hacer un

    SELECT 
    PREGUNTA =
    (SELECT TOP(1) D.CRITEV
    FROM (
    (SELECT CRITEV FROM AD_CRITEV WHERE ID_C_EV = 1  UNION ALL SELECT B.PREGUNTA FROM AD_CRITEV A INNER JOIN AD_LISTPREG B ON A.ID_C_EV = B.CRITEV AND B.FORMEV = 2 WHERE B.CRITEV = 1 UNION ALL SELECT CRITEV FROM AD_CRITEV 
        WHERE ID_C_EV = 2  UNION ALL SELECT B.PREGUNTA FROM AD_CRITEV A INNER JOIN AD_LISTPREG B ON A.ID_C_EV = B.CRITEV AND B.FORMEV = 2 WHERE B.CRITEV = 2 UNION ALL SELECT CRITEV FROM AD_CRITEV WHERE ID_C_EV = 3 
        UNION ALL SELECT B.PREGUNTA FROM AD_CRITEV A INNER JOIN AD_LISTPREG B ON A.ID_C_EV = B.CRITEV AND B.FORMEV = 2 WHERE B.CRITEV = 3 UNION ALL SELECT CRITEV FROM AD_CRITEV WHERE ID_C_EV = 4  UNION ALL SELECT B.PREGUNTA 
        FROM AD_CRITEV A INNER JOIN AD_LISTPREG B ON A.ID_C_EV = B.CRITEV AND B.FORMEV = 2 WHERE B.CRITEV = 4)
    ) AS D
    );

    O lo que es lo mismo, tú sentencia sql la integras como una tabla derivada y del resultado, obtienes solo el primer valor.

    No obstante, si el motor te dice que puede devolver más de un valor, es que puede. Por tanto hay que tenerlo en cuenta.

    martes, 28 de enero de 2020 5:40