none
WHEN NOT MATCHED BY SOURCE - MERGE T-SQL Parte 2 RRS feed

  • Pergunta

  • Bom dia,

    Eu já coloquei uma duvida sobre a questão de inserir dados históricos em outra tabela, muito bem respondida pelo José Diz https://social.msdn.microsoft.com/Forums/en-US/3892e090-1262-44e8-a55b-6391ce76e4cf/when-not-matched-by-source-merge-tsql?forum=transactsqlpt


    Minha dúvida agora é:
    Eu gostaria de armazenar nessa mesma tabela de historico a data em que essa linha foi inserida, porém a minha tabela Source (que esta em uma Stage) não possui um campo Data....a unica maneira de resolver isso, para que eu tenha a mesma estrutura de tabelas, seria adicionar uma coluna Data na minha tabela Source? 

    quarta-feira, 24 de agosto de 2016 13:52

Respostas

  • Entendi..no cenario que eu estava imaginando eu colocava os dados de origem

     WHEN NOT MATCHED BY SOURCE -- record exists in target but not source
                THEN DELETE -- delete from target
                OUTPUT $action AS Action, [Source].* 

    porém eu fiz uma alteracao para:

     WHEN NOT MATCHED BY SOURCE -- record exists in target but not source
                THEN DELETE -- delete from target
                OUTPUT $action AS Action, [DELETED].*  

    nesse momento ele guarda os dados que foram deletados da dimensão, e na dimensão eu tenho os dados de Data e todas as informações, com isso consigo guardar o historico de todas as alteraçoes em outra tabela e na minha dimensao ficam os dados atualizados.

    Obrigado pela ajuda....caso tenha algum ponto a acrescentar :) 


    quarta-feira, 24 de agosto de 2016 15:19

Todas as Respostas

  • Fit9,

    Então você quer pegar a data que o registro foi inserida ou quando o Merge for processado pegar a data?

    Será que o uso da função GetDate() não seria uma possibilidade?


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 24 de agosto de 2016 14:31
  • Obrigado por responder...

    Seria quando for inserida..então o getdate() é a função que preciso..porém se eu colocar um campo DataAtualizacao na minha tabela que armazena as mudanças, a estrutura da dessa tabela vai ser diferente da tabela source, logo é exibida uma mensagem de erro pois terei campos na tabela historico (DataAtualizacao) que não tenho na minha tabela source

    quarta-feira, 24 de agosto de 2016 14:43
  • Fit9,

    Então, se a estrutura for diferente realmente vai dar problemas!!! Você realmente precisa armazenar esta valor na tabela?

    O que talvez você possa fazer é usar o GetDate() para apresentar o valor da data, mas guardar devido a sua necessidade em outra tabela.

    A função GetDate() realmente é o caminho!!!


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 24 de agosto de 2016 15:13
  • Entendi..no cenario que eu estava imaginando eu colocava os dados de origem

     WHEN NOT MATCHED BY SOURCE -- record exists in target but not source
                THEN DELETE -- delete from target
                OUTPUT $action AS Action, [Source].* 

    porém eu fiz uma alteracao para:

     WHEN NOT MATCHED BY SOURCE -- record exists in target but not source
                THEN DELETE -- delete from target
                OUTPUT $action AS Action, [DELETED].*  

    nesse momento ele guarda os dados que foram deletados da dimensão, e na dimensão eu tenho os dados de Data e todas as informações, com isso consigo guardar o historico de todas as alteraçoes em outra tabela e na minha dimensao ficam os dados atualizados.

    Obrigado pela ajuda....caso tenha algum ponto a acrescentar :) 


    quarta-feira, 24 de agosto de 2016 15:19