Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rgto

Função para pegar autores de livro

Recommended Posts

Gostaria de saber se alguém pode me dizer o que está errado nesta função? Acontece que para o livro que estou buscando, aparece apenas um autor, só que são três, o resultado da função abaixo só me traz o último autor. Como faço para pegar os três?

 

CREATE FUNCTION PegaAutores  (@ID_OBRA integer)RETURNS varchar(255)ASBEGIN  DECLARE @cString varchar(255)  IF EXISTS  (    SELECT [Tabela Autores].Nome_Autor    FROM [Tabela Obras Autores] LEFT JOIN [Tabela Autores] ON [Tabela Obras Autores].ID_Autor = [Tabela Autores].ID    WHERE ((([Tabela Obras Autores].ID_Obra)=@ID_OBRA))  )    SELECT @cString = [Tabela Autores].Nome_Autor    FROM [Tabela Obras Autores] LEFT JOIN [Tabela Autores] ON [Tabela Obras Autores].ID_Autor = [Tabela Autores].ID    WHERE ((([Tabela Obras Autores].ID_Obra)=@ID_OBRA))  ELSE    SET @cString = ''    RETURN(@cString)END

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola,

 

o que esta acontecendo é o seguinte:

 

Quando você deu o SELECT ele atribuí o valor do primeiro registro para a variável "@cString" e você logo em seguida termina a função por isso que so retorna o primeiro registro.

 

Eu recomendaria para você utilizar uma procedure onde ele da o SELECT que retorne o RESULTSET dos seus autores.

 

CREATE PROCEDURE PegaAutores  (@ID_OBRA integer)AS DECLARE @cString varchar(255)   SELECT [Tabela Autores].Nome_Autor   FROM [Tabela Obras Autores] LEFT JOIN [Tabela Autores] ON [Tabela Obras Autores].ID_Autor = [Tabela Autores].ID   WHERE ((([Tabela Obras Autores].ID_Obra)=@ID_OBRA))

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.