none
Select com erro (continuação) RRS feed

  • Pergunta

  • Olá Pessoal,

    Esclarecendo melhor o "select" que me dá um erro, é o seguinte:

    Preciso gravar o código em uma Tabela1, que deverá vir de um "select" de 2 outras tabelas (TAbela2 e Tabela3)
    relacionadas por outro campo (entre elas). Onde a Tabela1 tbm se relaciona com a Tabela2 por um "outro campo"

    Proém, no resultado do select tem mais de 1 registro relacionado à Tabela1


    Msg 512, Level 16, State 1, Line 2

    Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

     

    Use Bco_Dados
    update Bco_Dados.Tabela1 set CAMPO_X = (
    SELECT Bco_Dados.Tabela2.Campo_origem
    FROM   Bco_Dados.Tabela2
    INNER JOIN Bco_Dados.Tabela2 ON
      Bco_Dados.Tabela2.Campo_Y = Bco_Dados.Tabela1.Campo_Y
    Where  Bco_Dados.Tabela2.Campo1 = Bco_Dados.Tabela1.Campo1

    sábado, 6 de agosto de 2011 20:19

Todas as Respostas

  • Aprendiz,

    Você deve estar utilizando uma subquery com operador de igual que esta retornando mais de uma linha, isso não é possível no SQL Server, troque o operador por In.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    segunda-feira, 8 de agosto de 2011 00:22
  • Boa Noite,

    Possivelmente o resultado do JOIN da tabela2 com a tabela1 retorna mais de um registro e por isso não é possível atualizar a coluna CampoX. Seria como ter um ID1 na tabela1 relacionando-se com dois IDs 1 na tabela2. Qual dois dois deveria ser considerado no update ? Os dois não tem como e por isso a mensagem de erro. Uma forma rápida de resolver é mudar a lógica do update ou colocar um SELECT TOP(1) Campo_Origem, mas adianto que isso só vai sumir com a mensagem de erro, mas poderá lhe trazer sérios problemas de integridade no futuro.

    O ideal mesmo seria fazer o SELECT corretamente para que apenas um registro seja retornado (possivelmente faltou uma regra de negócio no meio).

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    segunda-feira, 8 de agosto de 2011 02:32