Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

gmrcosta

Campo Varbinary (MAX)

Recommended Posts

Bom dia pessoal,

 

Vejam se alguém consegue me ajudar.

 

Tenho um campo varbinary(max) em uma tabela, porém o conteúdo é variável entre PNG , JPG e GIF.

 

Existe alguma forma de saber , em cada registro qual a extensão de seu conteúdo ?

 

ABS

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o campo é somente armazenamento, tente utilizar o CONVERT direto:

 

 

SELECT CONVERT(VARCHAR(MAX), CAMPO) FROM TABELA
 

 

[]´s


Conforme postado em https://social.msdn.microsoft.com/Forums/sqlserver/pt-BR/40fc367b-2018-4d15-8eac-fadc8bb73306/contedo-do-campo-varbinary-max?forum=520

 

A uns bons tempos atras tive uma analise semelhante, mas no meu caso, eu consegui verificar utilizando um CONVERT(VARCHAR(MAX,CAMPO) que os primeiros caracteres podem ser da extensao do arquivo.

Fiz um teste local:

2mxpp1s.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

"gmrcosta", geralmente os arquivos de imagem possuem header com informações sobre o conteúdo do arquivo. Como essas informações ficam armazenadas no corpo do arquivo, então a coluna binary também armazenou esse header. Ou seja, há como descobrir qual o tipo de cada arquivo, como demonstrado pelo Advaldo; basta obter qual é o formato de cada tipo de arquivo que deseja analisar e então montar o respectivo código T-SQL.

 

 

Eis código T-SQL que demonstra como decodificar o header:

-- código 1 v2
use tempdb;

CREATE TABLE Cadastro (ID int, Nome varchar(40), Foto varbinary(max));

-- simulação do cadastro
INSERT into Cadastro values 
     (1, 'funcionário 1', 0xFFD8FFE00010),
     (2, 'funcionário 2', 0x474946383961C2),
     (3, 'funcionário 3', 0x89504E470D0A1A);
go

-- função que decodifica o tipo
CREATE FUNCTION DecodHeader (@Header varchar(20))
  returns table as return
SELECT case when Left(@Header, 2) = 0xFFD8 then 'jpeg'
            when Left(@Header, 3) = 'GIF' then 'gif'
            when Substring(@Header, 2, 3) = 'PNG' then 'png' 
            when Left(@Header, 2) = 'BM' then 'bitmap'
            when Left(@Header, 2) in ('II', 'MM') then 'tiff'
            else '?' end as Tipo;
go

-- aqui se obtém o provável tipo
SELECT C.ID, C.Nome, H.Tipo
  from Cadastro as C
       cross apply dbo.DecodHeader(Convert(varchar(20), Foto)) as H;

linkedin.gif José Diz Belo Horizonte, MG - Brasil

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.