none
OPENJSON - caracteres bagunçados RRS feed

  • Pergunta

  • Bom dia,

    Estou importando um arquivo JSON usando o OPENJSON

    Declare @JSON varchar(max)
    SELECT @JSON = BulkColumn FROM OPENROWSET (BULK 'F:\json\MRS_Incidents_SLA.json', SINGLE_CLOB) as j

    SELECT * FROM OPENJSON(@JSON) WITH(............campos do arquivo............)

    Mas quando tem alguma acentuação, fica tudo bagunçado. Já tentei mudar o COLLATE, e nada.

    No arquivo: 

    No mgmt studio:

    Alguém tem alguma ideia????

    Obrigado!



    Eduardo Portescheller
    portescheller@msn.com

    sexta-feira, 14 de junho de 2019 14:31

Respostas

  • Junior Galvão, sim, e não deu certo.

    DBA.NOTURNO, ja tinha testado isso e não deu certo.

    Enfim, consegui com uma função que encontrei em outro fórum:

    CREATE Function [dbo].[Utf8ToUcs](@src varchar(MAX)) returns nvarchar(MAX) as
    begin
        declare @i int, @res nvarchar(MAX)=@src, @pi varchar(18)
        select @pi='%[à-ï][€-¿][€-¿]%',@i=patindex(@pi,@src collate Latin1_General_BIN)
        while @i>0 select @res=stuff(@res,@i,3,nchar(((ascii(substring(@src,@i,1))&31)*4096)+((ascii(substring(@src,@i+1,1))&63)*64)+(ascii(substring(@src,@i+2,1))&63))), @src=stuff(@src,@i,3,'.'), @i=patindex(@pi,@src collate Latin1_General_BIN)
        select @pi='%[Â-ß][€-¿]%',@i=patindex(@pi,@src collate Latin1_General_BIN)
        while @i>0 select @res=stuff(@res,@i,2,nchar(((ascii(substring(@src,@i,1))&31)*64)+(ascii(substring(@src,@i+1,1))&63))), @src=stuff(@src,@i,2,'.'),@i=patindex(@pi,@src collate Latin1_General_BIN)
        return @res
    end
    GO

    Vejam o resultado:

    Obrigado,


    Eduardo Portescheller
    portescheller@msn.com


    segunda-feira, 17 de junho de 2019 18:04

Todas as Respostas

  • Eduardo,

    Você esta tentando mudar o collate diretamente no Select?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    domingo, 16 de junho de 2019 00:11
  • Eduardo

    altere de SINGLE_CLOB para SINGLE_BLOB

    domingo, 16 de junho de 2019 04:58
  • Junior Galvão, sim, e não deu certo.

    DBA.NOTURNO, ja tinha testado isso e não deu certo.

    Enfim, consegui com uma função que encontrei em outro fórum:

    CREATE Function [dbo].[Utf8ToUcs](@src varchar(MAX)) returns nvarchar(MAX) as
    begin
        declare @i int, @res nvarchar(MAX)=@src, @pi varchar(18)
        select @pi='%[à-ï][€-¿][€-¿]%',@i=patindex(@pi,@src collate Latin1_General_BIN)
        while @i>0 select @res=stuff(@res,@i,3,nchar(((ascii(substring(@src,@i,1))&31)*4096)+((ascii(substring(@src,@i+1,1))&63)*64)+(ascii(substring(@src,@i+2,1))&63))), @src=stuff(@src,@i,3,'.'), @i=patindex(@pi,@src collate Latin1_General_BIN)
        select @pi='%[Â-ß][€-¿]%',@i=patindex(@pi,@src collate Latin1_General_BIN)
        while @i>0 select @res=stuff(@res,@i,2,nchar(((ascii(substring(@src,@i,1))&31)*64)+(ascii(substring(@src,@i+1,1))&63))), @src=stuff(@src,@i,2,'.'),@i=patindex(@pi,@src collate Latin1_General_BIN)
        return @res
    end
    GO

    Vejam o resultado:

    Obrigado,


    Eduardo Portescheller
    portescheller@msn.com


    segunda-feira, 17 de junho de 2019 18:04
  • Eduardo,

    Você esta especificando os campos do arquivo passando os tipos de dados:

    SELECT *
    FROM OPENJSON ( @json
    WITH (  
                 
    Number   varchar(200)   '$.Order.Number'
                 
    Date     datetime       '$.Order.Date'
                  Customer
    varchar(200)   '$.AccountNumber'
                  Quantity
    int            '$.Item.Quantity'
                  [
    Ordernvarchar(MAXAS JSON 


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 17 de junho de 2019 18:07