none
Conteúdo do Campo Varbinary (MAX) RRS feed

  • 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,

    
    quinta-feira, 6 de novembro de 2014 11:30

Respostas

  • Deleted
    • Sugerido como Resposta Mr. GMSOFT quinta-feira, 6 de novembro de 2014 14:02
    quinta-feira, 6 de novembro de 2014 13:43
  • 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
    quinta-feira, 6 de novembro de 2014 16:05
    Moderador

Todas as Respostas

  • Não seria mais facil ao gravar o arquivo você também gravar a extensão em uma coluna separada?
    quinta-feira, 6 de novembro de 2014 11:46
  • Isso será feito daqui para a frente, mas existe um "legado" que preciso saber a extensão.
    quinta-feira, 6 de novembro de 2014 11:49
  • 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:

    https://social.msdn.microsoft.com/Forums/sqlserver/en-US/d1b15808-171d-4134-a4ed-a04d44115da9/unknown-file-name-and-type-in-varbinarymax


    Para maiores informações veja:

    http://social.technet.microsoft.com/wiki/pt-br/contents/articles/25056.manipulando-imagens-atraves-de-t-sql.aspx

    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
    quinta-feira, 6 de novembro de 2014 12:36
    Moderador
  • 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:

    quinta-feira, 6 de novembro de 2014 12:47
  • 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

    quinta-feira, 6 de novembro de 2014 13:16
  • Seria uma solução , mais muitas vezes é um tiro no escuro para uma aplicação
    quinta-feira, 6 de novembro de 2014 13:19
  • Deleted
    • Sugerido como Resposta Mr. GMSOFT quinta-feira, 6 de novembro de 2014 14:02
    quinta-feira, 6 de novembro de 2014 13:43
  • Deleted
    quinta-feira, 6 de novembro de 2014 14:01
  • Gostei levantou uma boa questão que estava em duvida, aqui nesse link você tem todos os formatos para Image File header format

    C
    réditos ao Jose.Diz, vi muito de seus artigos inclusive pesquisa de texto em VarBinary no Sql Server,parabéns
    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
    quinta-feira, 6 de novembro de 2014 16:05
    Moderador
  • Só complementando para um teste rápido você pode seguir o tutorial do Macoratti para carregar imagens em PictureBox
    quinta-feira, 6 de novembro de 2014 16:14
  • Deleted
    sexta-feira, 7 de novembro de 2014 17:52