none
Erro multi-part identifier em function RRS feed

  • Pergunta

  • Estou criando essa função, as instruções fora da função funcionam corretamente e até crio a função, porém no momento da execução recebo o erro

    SELECT RANGE_DATAS '2012-01-01', '2020-12-01'

    Msg 4104, Level 16, State 1, Line 1
    The multi-part identifier "RANGE_DATAS" could not be bound.

    CREATE FUNCTION RANGE_DATAS(@DATA_INICIAL DATETIME,@DATA_FINAL DATETIME)
    RETURNS VARCHAR(MAX)
    AS 
    BEGIN
    
    DECLARE @DATA_TEMP AS DATETIME
    DECLARE @COUNT AS INT
    DECLARE @LIMITE AS INT
    DECLARE @RETORNO AS VARCHAR(MAX)
    DECLARE @MES AS VARCHAR(2)
    DECLARE @ANO AS CHAR(4)
    
    ------------------------------------------------
    -- PARA TESTE
    ------------------------------------------------
    -- DECLARE @DATA_INICIAL AS DATETIME
    -- DECLARE @DATA_FINAL AS DATETIME
    -- SET @DATA_INICIAL = '2012-01-01'
    -- SET @DATA_FINAL = '2014-01-01'
    ------------------------------------------------
    
    
    SET @LIMITE = DATEDIFF(MM,@DATA_INICIAL,@DATA_FINAL) + 1
    SET @COUNT = 1
    SET @RETORNO = ''
    
    WHILE (@COUNT <= @LIMITE)
    BEGIN	
    	SET @DATA_TEMP = DATEADD(MONTH, @COUNT-1, @DATA_INICIAL)
    	SET @ANO = DATEPART(YEAR, @DATA_TEMP)	
    	SET @MES = DATEPART(MONTH, @DATA_TEMP)
    	SET @RETORNO = @RETORNO + '[' + @MES + '/' + @ANO +']'
    	IF (@COUNT <> @LIMITE )	SET @RETORNO = @RETORNO + ','
    	SET @COUNT = @COUNT + 1
    END
    
    RETURN @RETORNO
    
    END

    Alguém sabem o que pode ser? Já pesquisei bastante e não consegui identificar

    quinta-feira, 20 de junho de 2013 17:04

Respostas

  • Rodrigo, lembre-se que voce tem que passar o schema quando usa uma função e utilizar entre parenteses, tente assim:

    SELECT dbo.RANGE_DATAS ('2012-01-01', '2020-12-01')


    Alexandre Matayosi Conde Mauricio.

    • Marcado como Resposta Rodrigo_Figueira quinta-feira, 20 de junho de 2013 20:48
    quinta-feira, 20 de junho de 2013 17:35

Todas as Respostas

  • Rodrigo,

    Qual o select que voce esta chamando essa função? poste ele por favor.

    Em funções voce deve utilizar o schema tambem dbo.NomeDaFuncao


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Email: fabrizzio.antoniaci@gmail.com


    quinta-feira, 20 de junho de 2013 17:20
    Moderador
  • Rodrigo, lembre-se que voce tem que passar o schema quando usa uma função e utilizar entre parenteses, tente assim:

    SELECT dbo.RANGE_DATAS ('2012-01-01', '2020-12-01')


    Alexandre Matayosi Conde Mauricio.

    • Marcado como Resposta Rodrigo_Figueira quinta-feira, 20 de junho de 2013 20:48
    quinta-feira, 20 de junho de 2013 17:35
  • Rodrigo,

    Como você esta criando uma function do tipo In-Line basicamente a forma de execução é através de um simples Select o exemplo do Alexandre é a forma de execução que você precisa.


    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]

    quinta-feira, 20 de junho de 2013 19:25
  • Obrigado, deu certo! Faltavam os parênteses mesmo.
    • Editado Rodrigo_Figueira quinta-feira, 20 de junho de 2013 20:50 Faltou informação
    quinta-feira, 20 de junho de 2013 20:49