Usuário com melhor resposta
OPENJSON - caracteres bagunçados

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
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
GOVejam o resultado:
Obrigado,
Eduardo Portescheller
portescheller@msn.com- Editado Eduardo Portescheller segunda-feira, 17 de junho de 2019 18:05
- Marcado como Resposta Eduardo Portescheller segunda-feira, 17 de junho de 2019 18:05
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]
-
-
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
GOVejam o resultado:
Obrigado,
Eduardo Portescheller
portescheller@msn.com- Editado Eduardo Portescheller segunda-feira, 17 de junho de 2019 18:05
- Marcado como Resposta Eduardo Portescheller segunda-feira, 17 de junho de 2019 18:05
-
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',
[Order] nvarchar(MAX) AS JSONPedro 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]