none
Converter VarBinary em VarChar RRS feed

  • Pergunta

  •  

    Meu antecessor deixou aqui na empresa algumas tabelas com campos tipo VarBinary, que não revelam seus conteúdos. Como eu devo proceder para fazer com que eu tenha condições de ler o conteúdo desse? Conheci a função PWDCOMPARE, porém ela só compara um valor com o campo binário e retorna sim ou não. Preciso de alguma função que converta VarBinary em VarChar, por exemplo?
    terça-feira, 8 de julho de 2008 12:30

Respostas

  • Ola... fiz uns testes aqui e funcionou sem problemas... verifica ai, se é esse o seu problema:

    DECLARE @TEXT VARCHAR(1000)
    SELECT @TEXT = 'HELLO WORD'
    SELECT CONVERT(VARBINARY(1000), @TEXT)
    
    DECLARE @bin VARBINARY(1000)
    SELECT @BIN = 0x48454C4C4F20574F5244
    
    SELECT CONVERT(VARCHAR(1000), @BIN) 
    

    ------------------------------------
    0x48454C4C4F20574F5244

    (1 row(s) affected)

     

    -----------------------------------
    HELLO WORD

    (1 row(s) affected)


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    • Marcado como Resposta Heloisa Pires sexta-feira, 6 de julho de 2012 17:00
    quarta-feira, 29 de setembro de 2010 21:12
    Moderador

Todas as Respostas

  • André,

     

    Procure mais informações sobre esta função: sys.fn_varbintohexstr

     

    Sendo esta função utilizada para converter valores binary para string!!!

     

    Agora você poderia tentar utilizar as funções de conversão do SQL Server, sendo elas: Convert e Cast.

    terça-feira, 8 de julho de 2008 12:41
  • Apenas para explicar melhor:

     

    Se eu quiser converter um campo VarChar em VarBinary, basta escrever:

     

    CONVERT(VarBinary(100), 'André')

     

    A minha dúvida é: se eu depois quiser ler a informação de um campo VarBinary, como eu devo fazer?

     

    terça-feira, 8 de julho de 2008 12:44
  • Bom Dia,

     

    O PWDCompare é utilizado para trabalhar com senhas que também utilizam o VARBINARY mas que além desse tipo de dados usam ainda a criptografia. Se seu antecessor está gravando dados criptografados utilizando as procedures PWDEncrypt e PWDCompare então não há como recuperar o conteúdo.

     

    Se o VARBINARY é utilizado apenas como um tipo de dados, basta utilizar o CONVERT. Ex:

     

    Code Snippet
    DECLARE @Valor VARBINARY(20)
    SET @Valor = CAST('1235667' AS VARBINARY(20))
    SELECT @Valor, CAST(@Valor AS VARCHAR(20))

     

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 8 de julho de 2008 12:46
  • Pedro, tentei fazer a conversão do campo para string usando CONVERT e o resultado foi um emaranhado de códigos sem nexo. Vou ver a sua sugestão. Obrigado.

     

    terça-feira, 8 de julho de 2008 12:47
  • Olá André,

     

    O seu antecessor conseguia ler essas colunas ? Se as mesmas são criptografadas não haverá o que fazer. Como é feita a gravação desses registros ? Alguma SP faz a conversão para binário ? Algum componente na aplicação faz a conversão ?

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 8 de julho de 2008 12:57
  • Gustavo,

     

    Nesse caso de não haver como recuperar o conteúdo, como eu faria, então, para ALTERAR esse conteúdo?

     

    Obrigado.

    terça-feira, 8 de julho de 2008 13:02
  • André,

     

    Como você mesmo disse, o seu antecessor trabalhava como com estes dados?

    terça-feira, 8 de julho de 2008 13:07
  • Olá André,

     

    Acho que o fundamental é descobrir como os dados são gravados e localizar onde está a conversão para binário. Após isso poderemos prosseguir para saber se é possível recuperá-los ou se a única saída é alterá-los.

     

    Se você puder ignorá-los e simplesmente não desejar trabalhar com VARBINARY, atualize os dados para NULL e troque o tipo de dados. Essa solução é extrema mas funciona embora eu ache que não devemos utilizá-la ainda.

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 8 de julho de 2008 13:21
  • Passei por algo parecido...

    Vejam se resolve:

    DECLARE @hash VARBINARY(16)
    DECLARE @data VARCHAR(MAX)
    SET @data = 'RODRIGO JORGE GONÇALVES'
    SET @hash = HashBytes('MD5', @data)
    SELECT @data, @hash,Convert(varchar(34),@hash,1)

     

    []s,

    RJ

    quarta-feira, 29 de setembro de 2010 20:21
  • Ola... fiz uns testes aqui e funcionou sem problemas... verifica ai, se é esse o seu problema:

    DECLARE @TEXT VARCHAR(1000)
    SELECT @TEXT = 'HELLO WORD'
    SELECT CONVERT(VARBINARY(1000), @TEXT)
    
    DECLARE @bin VARBINARY(1000)
    SELECT @BIN = 0x48454C4C4F20574F5244
    
    SELECT CONVERT(VARCHAR(1000), @BIN) 
    

    ------------------------------------
    0x48454C4C4F20574F5244

    (1 row(s) affected)

     

    -----------------------------------
    HELLO WORD

    (1 row(s) affected)


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    • Marcado como Resposta Heloisa Pires sexta-feira, 6 de julho de 2012 17:00
    quarta-feira, 29 de setembro de 2010 21:12
    Moderador
  • Pode ser o que aconteceu comigo aqui no serviço, a pessoa compactou os dados antes de transformar para varBinary, você terá que descompactar para depois converter para char.
    quarta-feira, 18 de março de 2015 14:50