Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro ao criar função

O que estaria errado nesta minha função?

CREATE FUNCTION FUNCTABELANOTAS (@DATA_INICIO DATE, @DATA_FIM DATE) RETURNS TABLE
AS
BEGIN
    RETURN    SELECT DISTINCT DATA, [dbo].[NUMERONOTAS](DATA) AS NUMERO 
            FROM [NOTAS FISCAIS] WHERE DATA >= @DATA_INICIO 
                AND DATA <= @DATA_FIM
END

Quando crio sem o BEGIN e o END ela é criada normalmente

CREATE FUNCTION FUNCTABELANOTAS (@DATA_INICIO DATE, @DATA_FIM DATE) RETURNS TABLE
AS
    RETURN    SELECT DISTINCT DATA, [dbo].[NUMERONOTAS](DATA) AS NUMERO 
            FROM [NOTAS FISCAIS] WHERE DATA >= @DATA_INICIO 
                AND DATA <= @DATA_FIM
1 resposta
solução!

Olá Jackson!

Desculpa a demora em ti responder! Isso está correto, de acordo com a própria documentação do SQL Server. Uma função que retorna uma tabela só pode ter um único SELECT, nada mais do que isso, de acordo com a documentação a especificação do comando deve ser assim:

-- Transact-SQL Inline Table-Valued Function Syntax   
CREATE [ OR ALTER ] FUNCTION [ schema_name. ] function_name   
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type   
    [ = default ] [ READONLY ] }   
    [ ,...n ]  
  ]  
)  
RETURNS TABLE  
    [ WITH <function_option> [ ,...n ] ]  
    [ AS ]  
    RETURN [ ( ] select_stmt [ ) ]  
[ ; ]

Dessa forma, dentro do RETURN, você só pode retornar um único SELECT (como ou sem parenteses envolta do SELECT, isso é opcional), por isso quando você tenta criar a função com o BEGIN END dá erro.

Já a utilização do BEGIN e END seria se você tivesse varias instruções e ou manipulações na tabela ou nas tabelas, antes de retornar alguma tabela.

Espero que tenha ajudado!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software