none
Usar HashBytes na criação da tabela. RRS feed

  • Pergunta

  • Olá, alguém saberia me dizer se é possível usar a função HashBytes na Criação de uma tabela?

    Ex:

    CREATE TABLE VENDAS

                                  ( VendasID INT IDENTITY(1,1),  

                                    Data_Venda DATE NOT NULL,  

                                    SubTotal MONEY NOT NULL,  

                                    Taxa_Venda MONEY NOT NULL, 

                                    Frete MONEY NOT NULL, 

                                    Total AS (SubTotal + Taxa_Venda + Frete), 

                                    MD5TOTAL as hashbytes('MD5', Total), 

                                    Data_Entrega DATE NULL) 

     

    Algo assim como  no campo MD5TOTAL seria possível?

             
                               

     

    segunda-feira, 12 de dezembro de 2011 17:35

Respostas

  • Jairo,

     

    A função hashbytes não aceita valores numericos, apenas varchar, nvarchar e varbinary.

    Alem de o foco de uma coluna computada não poder ser foco de outra coluna computada.

    Porem essa sintaxe abaixo, funciona perfeitamente:

    CREATE TABLE Teste

    (

          Nome VARCHAR(100),

          SobreNome varchar(100),

          NomeComposto AS (Nome + ' ' + Sobrenome),

          NomeCompostoHash AS (HASHBYTES('MD5',Nome + ' ' + SobreNome))

    )


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    segunda-feira, 12 de dezembro de 2011 17:40
    Moderador

Todas as Respostas

  • Jairo,

     

    A função hashbytes não aceita valores numericos, apenas varchar, nvarchar e varbinary.

    Alem de o foco de uma coluna computada não poder ser foco de outra coluna computada.

    Porem essa sintaxe abaixo, funciona perfeitamente:

    CREATE TABLE Teste

    (

          Nome VARCHAR(100),

          SobreNome varchar(100),

          NomeComposto AS (Nome + ' ' + Sobrenome),

          NomeCompostoHash AS (HASHBYTES('MD5',Nome + ' ' + SobreNome))

    )


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    segunda-feira, 12 de dezembro de 2011 17:40
    Moderador
  • Entendi, mas mesmo usando um campo do tipo varchar, da erro na criação da tabela.
    segunda-feira, 12 de dezembro de 2011 17:53
  • Jairo,

     

    Da erro pois uma segunda tabela calculada, esta utilizando uma outra tabela calculada, veja que no exemplo que lhe enviei aqui, a segunda tabela calculada, aonde se esta utilizando a função de hash, esta repetindo a formula da primeira, devido a primeira calculada, não poder ser alvo de outra calculada.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    segunda-feira, 12 de dezembro de 2011 17:55
    Moderador
  • O Fabrizzio, deu certo muito obrigado.
    segunda-feira, 12 de dezembro de 2011 18:23
  • jairoamorin,

    Veja estes exemplos:

    --Declarando um variável @HashThis--
    DECLARE @MeuValorCriptografado NVarChar(max);

    SELECT @MeuValorCriptografado = CONVERT(nvarchar,'Pedro');

    /* Utilizando a função HashBytes para converter a sentença
    com uso dos Algoritmos Hash + SHA1, SHA, MD5, MD4, MD2 */
    SELECT HashBytes('SHA1', @MeuValorCriptografado) Resultado
    Union
    SELECT HashBytes('SHA', @MeuValorCriptografado)
    Union
    Select HashBytes('MD5', @MeuValorCriptografado)
    Union
    Select HashBytes('MD4', @MeuValorCriptografado)
    Union
    Select HashBytes('MD2', @MeuValorCriptografado)
    Go


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    domingo, 18 de dezembro de 2011 23:38