none
Como acrescentar HASH em query XML EXPLICIT? RRS feed

  • Pergunta

  • Pessoal,
    Preciso acrescentar uma tag de hash no meu XML. Estou utilizando SQL Server 2000.
    O que eu fiz:
    1) Montei um Select XML Explicit que retorna uma linha XML buscando dados de uma tabela. Ficou perfeito.
    2) Achei um site que tem o algoritimo para gerar o valor do HASH: http://www.codeproject.com/KB/database/xp_md5.aspx
    Legal! Porém, a função que gerar o hash pede um valor string e o select do XML não traz um valor string.

    Pergunta: Como faço para incluir um hash no meu xml explicit? Existe outra maneira de fazer isso?

    Valeu!
    segunda-feira, 13 de abril de 2009 17:57

Respostas

  • Bem pessoal, desistir do hash mas só para ficar registrado fiz um JOB para gerar o arquivo diariamente com o seguinte comando:


    bcp "exec pubs.dbo.xmlTeste" queryout "c:\XML\Teste.XML" -c -SServer13 -Uuser -Psenha


    Valeu pessoal!!!
    • Marcado como Resposta Mô_romzinho segunda-feira, 27 de abril de 2009 17:44
    segunda-feira, 27 de abril de 2009 17:44

Todas as Respostas

  • Acredito que seria mais fácil você fazer isso via aplicação, principalmente se for .net...  Não existiria uma maneira fácil de vc colocar esse hash como vc está pensando.

    Abraços
    Gilberto Neto
    Gilberto Neto Blog: http://gilberto-neto.spaces.live.com/default.aspx
    terça-feira, 14 de abril de 2009 10:55
  • Mô_romzinho,

    Você deseja incluir um valor hash dentro do seu xml?
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 14 de abril de 2009 11:55
  • Junior,

     Pelo que entendi, ele quer o hash justamente do xml que ele gerou com o for xml, e ai adicionar dentro.  Possivelmente do xml ou da linha... para comprovar que aquela linha não foi alterada depois de gerada.

    Abraços
    Gilberto Neto
    Gilberto Neto Blog: http://gilberto-neto.spaces.live.com/default.aspx
    terça-feira, 14 de abril de 2009 11:57
  • Oi meninos
    Obrigada pela atenção!

    Gilberto, é isso mesmo que você entendeu.
    Mas como eu vou fazer um job no SQL para disparar este arquivo então não queria fazer via software.

    Obs: ainda não usando .NET aqui na empresa :-(

    Valeu

    MÔNICA
    terça-feira, 14 de abril de 2009 13:00
  • Bom, como é o sql server 2000, eu tentaria fazer assim, mas não sei se fica ok:

    Gerava o xml via for xml, jogaria o resultado numa variável, chamaria a função de hash...

    Abraços
    Gilberto Neto


    Gilberto Neto Blog: http://gilberto-neto.spaces.live.com/default.aspx
    terça-feira, 14 de abril de 2009 13:02

  • Eu tentei isso anteriomente, mas o problema é que a função hash quer um valor string. E não consigo jogar o valor retornado do select xml numa variável string.

    É como se a linha que ele retorna fosse de um tipo diferente, um tipo xml mesmo.

    Abraços
    Mônica
    terça-feira, 14 de abril de 2009 13:12
  • Gilberto,

    Mas eu não me lembro se no SQL Server 2000 existe funções de Hash!!!

    A idéia é boa, mas precisamos analisar esta compatibilidade.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 14 de abril de 2009 14:25

  • Você está certo Junior porém eu encontrei um site que tem uma dll e uma função para gerar o hash http://www.codeproject.com/KB/database/xp_md5.aspx

    Mas o problema é que não consegui "jogar" o select xml para a função.

    Deu para entender?
    terça-feira, 14 de abril de 2009 14:39
  • Eu não testei, mas será que vc declararando uma variavel varchar(8000), e no proprio select dar um @variavel = campo ?

    Manda o select q vc tá usando.

    Abraços
    Gilberto Neto
    Gilberto Neto Blog: http://gilberto-neto.spaces.live.com/default.aspx
    terça-feira, 14 de abril de 2009 14:41
  • Boa Tarde,

    Receio que no 2000 as limitações são muitas. Desconheço uma forma de você fazer isso (embora ainda não tenha esgotado as possibilidades).

    DECLARE @T TABLE (Codigo INT, Nome VARCHAR(200))
    
    INSERT INTO @T (Codigo, Nome) VALUES (1,'Nome 1')
    INSERT INTO @T (Codigo, Nome) VALUES (2,'Nome 2')
    INSERT INTO @T (Codigo, Nome) VALUES (3,'Nome 3')
    
    DECLARE @V VARCHAR(8000)
    
    -- Erro
    SELECT CAST((SELECT * FROM @T FOR XML AUTO) AS VARCHAR(8000))
    
    -- Erro
    SELECT @V = * FROM @T FOR XML AUTO
    
    -- Erro
    SELECT * INTO #T FROM @T FOR XML AUTO
    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Como realizar cálculos com horas no SQL Server – Parte II
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!532.entry


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 14 de abril de 2009 14:47
  • É, eu tb não consigo ... risos!

    Tentei aqui, de todas as formas que me veio na cabeça, mas dá erro... é bem limitado o for xml auto do sql server 2000... não permite nem um INSERT INTO TABELA SELECT * FROM TABELA FOR XML AUTO....

    Abraços
    Gilberto Neto
    Gilberto Neto Blog: http://gilberto-neto.spaces.live.com/default.aspx
    terça-feira, 14 de abril de 2009 15:11

  • Pior ainda, não estou usando XML AUTO (que teoricamente é mais simples), estou usando o XML EXPLICIT

    terça-feira, 14 de abril de 2009 16:55
  • Mô_romzinho,

    É verdade o XML Auto é bem mais simples, você tem realmente que armazenar este valor dentro do XML, não temos outra possibilidade?
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 14 de abril de 2009 16:59
  • Eu acredito que realmente você terá que assinar (ou gerar o hash) fora do banco.. infelizmente... :)  Não encontrei nada no SQL Server 2000 que deixasse fazer isso... O que vc pode é pelo sql server, tentar gerar um arquivo desse xml, e depois carregá-lo novamente pra fazer o hash... qual a periodicidade que vc precisa pra geração desse xml?

     

    Abraços
    Gilberto Neto


    Gilberto Neto Blog: http://gilberto-neto.spaces.live.com/default.aspx
    terça-feira, 14 de abril de 2009 17:03
  • Será diário. Mas como fazer isso de carregá-lo e gerar novamente? Teria que ser manual né?

    Pelo jeito é melhor eu fazer via sistema mesmo :-(
    terça-feira, 14 de abril de 2009 17:10
  • Acho que na aplicação talvez seja mais simples.

    Vc poderia usar o sqlcmd (http://msdn.microsoft.com/en-us/library/ms162773.aspx) para gerar o arquivo output do resultado do select.  Posteriormente usar o sqlcmd para pegar esse arquivo e gerar o hash, pq provavelmente consiga pegar esse arquivo e jogar numa variável do tipo varchar(8000).  Só que essa solução pode ser mais trabalhosa.

    Abraços
    Gilberto Neto
    Gilberto Neto Blog: http://gilberto-neto.spaces.live.com/default.aspx
    terça-feira, 14 de abril de 2009 17:53
  • Bem pessoal, desistir do hash mas só para ficar registrado fiz um JOB para gerar o arquivo diariamente com o seguinte comando:


    bcp "exec pubs.dbo.xmlTeste" queryout "c:\XML\Teste.XML" -c -SServer13 -Uuser -Psenha


    Valeu pessoal!!!
    • Marcado como Resposta Mô_romzinho segunda-feira, 27 de abril de 2009 17:44
    segunda-feira, 27 de abril de 2009 17:44