Usuário com melhor resposta
Conteúdo do Campo Varbinary (MAX)

Pergunta
-
Bom dia,
Vejam se alguém já possou por isso...
Tenho um campo varbinary(max) em uma tabela, porém o seu conteúdo é variável dependendo do registro...variável entre JPG, PNG e GIF.
Existe alguma forma de saber (via SQL), qual a extensão do dado armazenado neste campo ?
Abs,
Respostas
-
Deleted
- Sugerido como Resposta Mr. GMSOFT quinta-feira, 6 de novembro de 2014 14:02
-
GMRCosta,
Como você está vendo, existem algumas possibilidades de se "aproximar" das extensões das imagens através de T-SQL. Se você realmente precisa de precisão para recriar essas imagens mais antigas, eu acredito que você só poderá obter manipulando este binário em uma aplicação .Net ou de terceiros. Caso contrário um CASE no seu script com a opção do Advaldo, pode minimizar o problema.
É importante verificar se a extensão foi determinada corretamente, porque algumas aplicações (como o Paint) aceitam que o "arquivo" da imagem(lembre que a imagem é sempre um binário) esteja com qualquer extensão (ex.: JPG como PNG), mas outras aplicações simplesmente não irão abrir e poderão indicar que a imagem foi corrompida.
Eu sugiro que você crie nesta tabela uma coluna indicando a extensão da imagem (para arquivo) e procure atualizar todas às atuais com as extensões que você consegue identificar. Os demais registros de imagens sem extensões ou que poderão gerar dúvidas (JPG, TIFF,...) você pode criar uma aplicação .Net (Windows Forms ou Console) para carregar o binário em um objeto "Image", verificar a extensão correta. Logo após você pode atualizar esta nova coluna com a descrição desta extensão identificada.
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Mr. GMSOFT quinta-feira, 6 de novembro de 2014 16:14
- Marcado como Resposta Ricardo Barbosa Cortes quinta-feira, 6 de novembro de 2014 18:13
Todas as Respostas
-
-
-
GMRCosta,
Não é possível obter a extensão ou o nome original destes "binários", por este motivo é recomendado criar uma coluna na tabela para servir de referência caso seja necessário a reconstrução do arquivo.
O comum mesmo é utilizar um objeto .Net ou outro que carregue estes dados binários e ao "salvar/exportar" tenha disponível uma propriedade para às possíveis extensões.
No Fórum americano houve uma questão semelhante, veja:
Para maiores informações veja:Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Mr. GMSOFT quinta-feira, 6 de novembro de 2014 12:41
-
-
Bom dia,
Vejam se alguém já possou por isso...
Tenho um campo varbinary(max) em uma tabela, porém o seu conteúdo é variável dependendo do registro...variável entre JPG, PNG e GIF.
Existe alguma forma de saber (via SQL), qual a extensão do dado armazenado neste campo ?
Abs,
Fiquei intrigado com essa sua pergunta e fui fazer alguns testes....
Não sei se foi coincidência mas consegui identificar os arquivos do tipo GIG e PNG... mas os JPG não...
Segue o código .....
CREATE TABLE [dbo].[tulio]( [ID] [int] NOT NULL, [imagem] [varbinary](max) NOT NULL ) ON [PRIMARY]; GO DECLARE @img AS VARBINARY(MAX) SELECT @img = CAST(bulkcolumn AS VARBINARY(MAX)) FROM OPENROWSET(BULK 'd:\Mortal.png', SINGLE_BLOB) AS x; INSERT tulio (ID, imagem) SELECT 1,@img; GO DECLARE @img AS VARBINARY(MAX) SELECT @img = CAST(bulkcolumn AS VARBINARY(MAX)) FROM OPENROWSET(BULK 'd:\Lapis.jpg', SINGLE_BLOB) AS x; INSERT tulio (ID, imagem) SELECT 2,@img; GO DECLARE @img AS VARBINARY(MAX) SELECT @img = CAST(bulkcolumn AS VARBINARY(MAX)) FROM OPENROWSET(BULK 'd:\cachorro.gif', SINGLE_BLOB) AS x; INSERT tulio (ID, imagem) SELECT 3,@img; GO select * from dbo.tulio where imagem like '%gif%' select * from dbo.tulio where imagem like '%png%' select * from dbo.tulio where imagem like '%jpg%' -- NAO RETORNA NADA
Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 7 de novembro de 2014 14:52
-
-
Deleted
- Sugerido como Resposta Mr. GMSOFT quinta-feira, 6 de novembro de 2014 14:02
-
Deleted
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 7 de novembro de 2014 14:53
-
Gostei levantou uma boa questão que estava em duvida, aqui nesse link você tem todos os formatos para Image File header format
Créditos ao Jose.Diz, vi muito de seus artigos inclusive pesquisa de texto em VarBinary no Sql Server,parabéns -
GMRCosta,
Como você está vendo, existem algumas possibilidades de se "aproximar" das extensões das imagens através de T-SQL. Se você realmente precisa de precisão para recriar essas imagens mais antigas, eu acredito que você só poderá obter manipulando este binário em uma aplicação .Net ou de terceiros. Caso contrário um CASE no seu script com a opção do Advaldo, pode minimizar o problema.
É importante verificar se a extensão foi determinada corretamente, porque algumas aplicações (como o Paint) aceitam que o "arquivo" da imagem(lembre que a imagem é sempre um binário) esteja com qualquer extensão (ex.: JPG como PNG), mas outras aplicações simplesmente não irão abrir e poderão indicar que a imagem foi corrompida.
Eu sugiro que você crie nesta tabela uma coluna indicando a extensão da imagem (para arquivo) e procure atualizar todas às atuais com as extensões que você consegue identificar. Os demais registros de imagens sem extensões ou que poderão gerar dúvidas (JPG, TIFF,...) você pode criar uma aplicação .Net (Windows Forms ou Console) para carregar o binário em um objeto "Image", verificar a extensão correta. Logo após você pode atualizar esta nova coluna com a descrição desta extensão identificada.
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Mr. GMSOFT quinta-feira, 6 de novembro de 2014 16:14
- Marcado como Resposta Ricardo Barbosa Cortes quinta-feira, 6 de novembro de 2014 18:13
-
Só complementando para um teste rápido você pode seguir o tutorial do Macoratti para carregar imagens em PictureBox
-
Deleted
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 7 de novembro de 2014 18:17