none
SQL - Erro em uma função void RRS feed

  • Pergunta

  • Boa noite, sou novo no fórum em SQL desculpa por qualquer coisa e obrigado pelas respostas.

    Essa é a função, acho que escrevi a estrutura de algo da forma errada:

    CREATE FUNCTION [dbo].[RequestAccept](@IdRequest int,@ListMaxSize int) RETURNS VOID AS
    BEGIN
    DECLARE @IdF INT, @IdT INT,@SizeFrom int, @SizeTo int ;
    SELECT @IdF = IdFrom, @IdT = IdTo FROM FriendshipRequests WHERE Id = @IdRequest;
    SELECT @SizeFrom = COUNT(*) FROM Contacts WHERE Id = @IdF;
    SELECT @SizeTo = COUNT(*) FROM Contacts WHERE Id = @IdT;
    IF(@SizeFrom < 50 AND @SizeTo < 50)
    BEGIN
           INSERT Contacts VALUES(@IdF,@IdT);
           INSERT Contacts VALUES(@IdT,@IdF);
           DELETE FROM FriendshipRequests WHERE Id = @IdRequest;
    END
    END

    Erro:

    Severity	Code	Description	Project	File	Line	Suppression State
    Error		SQL71501: Function: [dbo].[RequestAccept] has an unresolved reference to Built-in Type [dbo].[VOID].		dbo.Function	1	

    OBS: eu retornei um INT só para não deixa em branco, na verdade a função era pra ser do tipo void.

    quinta-feira, 12 de maio de 2016 00:31

Respostas

  • Nao endenti sua questao (ela esta em desacordo com o titulo). sua funçao retorna um INt, portanto ela nao é VOID.

    outro detalhe

    IF(SizeFrom < 50 AND SizeTo < 50)

    nao vai funcionar pois nao SizeFrom  e SizeTo  nao sao variaveis declaradas... creio que é ai que esteja o problema. tente desta forma:

    CREATE FUNCTION [dbo].[RequestAccept](@IdRequest int,@ListMaxSize int) RETURNS INT AS
    BEGIN
    DECLARE @IdF INT, @IdT INT,@SizeFrom int, @SizeTo int ;
    SELECT @IdF = IdFrom, @IdT = IdTo FROM FriendshipRequests WHERE Id = @IdRequest;
    SELECT @SizeFrom = COUNT(*) FROM Contacts WHERE Id = @IdF;
    SELECT @SizeTo = COUNT(*) FROM Contacts WHERE Id = @IdT;
    IF(@SizeFrom < 50 AND @SizeTo < 50)
    BEGIN
           INSERT Contacts VALUES(@IdF,@IdT);
           INSERT Contacts VALUES(@IdT,@IdF);
           DELETE FROM FriendshipRequests WHERE Id = @IdRequest;
    END
    RETURN @IdRequest;
    END

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    • Marcado como Resposta Marcos SJ sexta-feira, 13 de maio de 2016 12:20
    quinta-feira, 12 de maio de 2016 15:57
  • Nao existe VOID para SQL Server.... se voce quer uma "funçao" que nao retorne nada, use procedure

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    • Marcado como Resposta Marcos SJ sexta-feira, 13 de maio de 2016 12:20
    sexta-feira, 13 de maio de 2016 09:39

Todas as Respostas

  • Bom dia Mateus Mendes Santana,

    Você precisa informar o erro.

    Atemnciosamente


    Marcos SJ

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 12 de maio de 2016 13:33
  • Mateus na sua função retorna um Int,

    Voce esta fazendo selects ali dentro da função isto tbm vai ocasionar erros, mas poste o erro que esta ocorrendo;

    Att

    quinta-feira, 12 de maio de 2016 15:18
  • Nao endenti sua questao (ela esta em desacordo com o titulo). sua funçao retorna um INt, portanto ela nao é VOID.

    outro detalhe

    IF(SizeFrom < 50 AND SizeTo < 50)

    nao vai funcionar pois nao SizeFrom  e SizeTo  nao sao variaveis declaradas... creio que é ai que esteja o problema. tente desta forma:

    CREATE FUNCTION [dbo].[RequestAccept](@IdRequest int,@ListMaxSize int) RETURNS INT AS
    BEGIN
    DECLARE @IdF INT, @IdT INT,@SizeFrom int, @SizeTo int ;
    SELECT @IdF = IdFrom, @IdT = IdTo FROM FriendshipRequests WHERE Id = @IdRequest;
    SELECT @SizeFrom = COUNT(*) FROM Contacts WHERE Id = @IdF;
    SELECT @SizeTo = COUNT(*) FROM Contacts WHERE Id = @IdT;
    IF(@SizeFrom < 50 AND @SizeTo < 50)
    BEGIN
           INSERT Contacts VALUES(@IdF,@IdT);
           INSERT Contacts VALUES(@IdT,@IdF);
           DELETE FROM FriendshipRequests WHERE Id = @IdRequest;
    END
    RETURN @IdRequest;
    END

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    • Marcado como Resposta Marcos SJ sexta-feira, 13 de maio de 2016 12:20
    quinta-feira, 12 de maio de 2016 15:57
  • Obrigado pela resposta. Eu retornei um INT só para não deixa em branco, na verdade a função era pra ser do tipo void. Eu chequei a essa função por intuição, achei que teria erros mais graves.

    CREATE FUNCTION [dbo].[RequestAccept](@IdRequest int,@ListMaxSize int) RETURNS VOID AS
    BEGIN
    DECLARE @IdF INT, @IdT INT,@SizeFrom int, @SizeTo int ;
    SELECT @IdF = IdFrom, @IdT = IdTo FROM FriendshipRequests WHERE Id = @IdRequest;
    SELECT @SizeFrom = COUNT(*) FROM Contacts WHERE Id = @IdF;
    SELECT @SizeTo = COUNT(*) FROM Contacts WHERE Id = @IdT;
    IF(@SizeFrom < 50 AND @SizeTo < 50)
    BEGIN
           INSERT Contacts VALUES(@IdF,@IdT);
           INSERT Contacts VALUES(@IdT,@IdF);
           DELETE FROM FriendshipRequests WHERE Id = @IdRequest;
    END
    END
    Severity	Code	Description	Project	File	Line	Suppression State
    Error		SQL71501: Function: [dbo].[RequestAccept] has an unresolved reference to Built-in Type [dbo].[VOID].		dbo.Function	1	
    

    sexta-feira, 13 de maio de 2016 01:55
  • Nao existe VOID para SQL Server.... se voce quer uma "funçao" que nao retorne nada, use procedure

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    • Marcado como Resposta Marcos SJ sexta-feira, 13 de maio de 2016 12:20
    sexta-feira, 13 de maio de 2016 09:39