1
resposta

[Reclamação] Exercício com problema

Olá, nessa aula aprendemos sim como criar uma função na qual ela irá RETORNAR uma tabela, porém não como passar uma tabela como parâmetro, além disso, o script disponibilizado não funcionou, deu um erro de sintaxe

Msg 156, Nível 15, Estado 1, Procedimento SomaValores, Linha 1 [Linha de Início do Lote 0]
Sintaxe incorreta próxima à palavra-chave 'table'.
Msg 1087, Nível 15, Estado 2, Procedimento SomaValores, Linha 8 [Linha de Início do Lote 0]
É necessário declarar a variável de tabela "@tabela".
Msg 178, Nível 15, Estado 1, Procedimento SomaValores, Linha 9 [Linha de Início do Lote 0]
Uma instrução RETURN com um valor retornado não pode ser usada neste contexto.
1 resposta

Oii, Alyson! Tudo bem?

Este exercício tem um próposito conceitual para que possamos compreender a lógica por trás da função descrita. Com isso em mente, não é essencial executar o comando, uma vez que sua execução requer inseri-lo no ambiente de testes, observando as regras de sintaxe e chamadas.

E enfatizo que o propósito da atividade não é executar o comando, mas sim saber qual é o objetivo da função UDF que está sendo apresentada na função mostrada como exemplo e em seguida escolher a alternativa correta.

Caso queira testar um código funcional que o retorno será 60, deixo o código abaixo:

CREATE TYPE dbo.TabelaValores AS TABLE (
    valor INT
)

GO

CREATE FUNCTION dbo.SomaValores (@tabela AS dbo.TabelaValores READONLY)
RETURNS @resultado TABLE (soma INT)
AS
BEGIN
    DECLARE @soma INT
    SET @soma = 0

    SELECT @soma = SUM(valor)
    FROM @tabela

    INSERT INTO @resultado (soma)
    VALUES (@soma)

    RETURN
END

GO

DECLARE @tabelaValores dbo.TabelaValores

INSERT INTO @tabelaValores (valor)
VALUES (10), (20), (30)

SELECT * FROM dbo.SomaValores(@tabelaValores)

No SQL Server, não é possível declarar uma tabela como tipo de parâmetro direto de uma função. Para contornar essa limitação, é necessário adotar uma abordagem alternativa, como o uso de uma tabela temporária ou uma variável de tabela. No código, foi utilizado a estratégia de criar o tipo dbo.TabelaValores e, em seguida, passado esse tipo como parâmetro na função CREATE FUNCTION, utilizando a cláusula RETURN AS TABLE. Inclusive, essa abordagem foi demonstrada pelo instrutor em uma aula anterior e o restante do código segue o padrão visto na aula.

Espero ter ajudado. Qualquer dúvida, não hesite em recorrer ao fórum.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!