locked
Função com OPENQUERY RRS feed

  • Pergunta

  • Pessoal,

    Estou com o seguinte erro no SQL Server 2012:

    "Error converting data type varchar to float."

    Acredito que seja algo com sintaxe, o Linked Server faz conexão com mysql.

    Campos:

    UFICMS_VALOR  decimal,

    UFICMS_ID  int

    Função está abaixo:

    ALTER FUNCTION [dbo].[FN_TESTE] (@UF int)
    RETURNS FLOAT
    AS
    BEGIN

    DECLARE @ICMS FLOAT, @consulta varchar(max);



    set @consulta = 'select icms.UFICMS_VALOR  from DB_ADMIN.TB_UF_ICMS icms where icms.UFICMS_ID in (' + CONVERT(CHAR,@UF) +  ')';





    SET @ICMS = CONVERT(float, ('SELECT * FROM OPENQUERY(MERCURY,'+ @consulta + ')'));

    RETURN @ICMS 

    END

    Desde Já agradeço !

    terça-feira, 30 de setembro de 2014 17:30

Respostas

  • JSantana,

    Então aparentemente realmente é um erro de sintaxe!!!

    Acredito que seja justamente nesta linha: SET @ICMS = CONVERT(float, ('SELECT * FROM OPENQUERY(MERCURY,'+ @consulta + ')'));

    Não é possível para o SQL Server realizer um Convert em um Select *, você tem que especificar qual coluna deste select deverá sobre a conversão, ainda mais por esta armazenando o resultado em uma varíavel!!!

    Tente assim:

    SET @ICMS = CONVERT(float, ('SELECT SuaColuna FROM OPENQUERY(MERCURY,'+ @consulta + ')'));
    • Não se esquecendo que a sua Query Dinâmica que esta contida na varíavel @Consulta, sera tratada internamente como uma Sub-Query e o resultado da mesma será repassado para o Select do Openquery.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    quarta-feira, 1 de outubro de 2014 13:12