none
Dúvida de como Inserir um registro RRS feed

  • Pergunta

  • Pessoal estou com um problema grande em mãos um cliente fez a migração de um servidor onde durante o processo de cópia do banco de dados o mesmo não sabe explicar no servidor antigo tem mais registros que o novo e o pior que ele notou isso somente após continuar trabalhando, bom eu consegui identificar a diferença porém em uma tabela não consigo entender como fazer para inserir o problema é o seguinte :

    Tenho o banco chamado phardraccerto onde este armazena os dados que estão faltando.

    Tenho o banco chamado pharmacy onde este é o banco que esta em produção.

    dentro de ambos eu tenho uma tabela chamada mt_movimentação

    Eu preciso recriar um registro nesta tabela e como ela funciona terei que criar um insert no banco pharmarcy fazendo um select na phardraccerto até aqui tudo bem o problema que dentro da tabela mt_movimentacao eu tenho cinco campos:

    qtde = armazena a quantidade vendida (esse valor eu tenho)

    qtdeanfiscal = armazena a quantidade fiscal anterior

    qtdeanreal = armazena minha quantidade real(ela é igual a qtdeanfiscal)

    qtdefiscal = armazena a quantidade fiscal atual

    qtdereal = armazena a quantidade real (ela é igual qtde fiscal)

    Pois bem agora vem o meu problema como eu preciso consultar um banco anterior para recriar esse movimento eu tambem preciso consultar o banco atual para verificar qual foi a ultima venda realizada para determiando produto e com base nesses dados eu terei de calcular os campos acima citados agora minha pergunta é como eu posso fazer um select onde ele analise todos os meus produtos em uma tabela e me retorne os mais recentes?

    Eu tentei fazer da seguinte forma:

      select [PHARMACY].[dbo].[MT_MOVIMENTACAO].material, [PHARMACY].[dbo].[MT_MOVIMENTACAO].QTDE, 
             [PHARMACY].[dbo].MT_MOVIMENTACAO.QTDEANTFISCAL, [PHARMACY].dbo.MT_MOVIMENTACAO.QTDEANTREAL, 
             [PHARMACY].dbo.MT_MOVIMENTACAO.QTDEFISCAL, [PHARMACY].dbo.MT_MOVIMENTACAO.QTDEREAL, 
             [PHARMACY].dbo.MT_MOVIMENTACAO.DATAALTERACAO, PHARDRACCERTO.dbo.ve_vendasitens.QTDE
        from [PHARMACY].[dbo].[MT_MOVIMENTACAO],PHARDRACCERTO.dbo.VE_VENDASITENS 
       where [PHARMACY].dbo.MT_MOVIMENTACAO.MATERIAL = PHARDRACCERTO.dbo.ve_vendasitens.MATERIAL 
         and (PHARDRACCERTO.dbo.ve_vendasitens.ID_VENDA = 188770) 
         and pharmacy.dbo.mt_movimentacao.dataalteracao > '2013-03-20'
     order by pharmacy.dbo.mt_movimentacao.dataalteracao desc
      select [PHARMACY].[dbo].[MT_MOVIMENTACAO].material, [PHARMACY].[dbo].[MT_MOVIMENTACAO].QTDE, 
             [PHARMACY].[dbo].MT_MOVIMENTACAO.QTDEANTFISCAL, [PHARMACY].dbo.MT_MOVIMENTACAO.QTDEANTREAL, 
             [PHARMACY].dbo.MT_MOVIMENTACAO.QTDEFISCAL, [PHARMACY].dbo.MT_MOVIMENTACAO.QTDEREAL, 
             [PHARMACY].dbo.MT_MOVIMENTACAO.DATAALTERACAO, PHARDRACCERTO.dbo.ve_vendasitens.QTDE
        from [PHARMACY].[dbo].[MT_MOVIMENTACAO],PHARDRACCERTO.dbo.VE_VENDASITENS 
       where [PHARMACY].dbo.MT_MOVIMENTACAO.MATERIAL = PHARDRACCERTO.dbo.ve_vendasitens.MATERIAL 
         and (PHARDRACCERTO.dbo.ve_vendasitens.ID_VENDA = 188770) 
         and pharmacy.dbo.mt_movimentacao.dataalteracao > '2013-03-20'
     order by pharmacy.dbo.mt_movimentacao.dataalteracao desc

    O retorno dessa consulta foi o seguinte:

    material QTDE QTDEANTFISCAL QTDEANTREAL QTDEFISCAL QTDEREAL DATAALTERACAO        QTDE
    ME10858   3                  5.00                5.00               2.00             2.00      2013-03-25 17:29:03.090 1.00
    ME10858   1                  6.00                6.00               5.00             5.00      2013-03-25 11:19:54.700 1.00
    PE00950   1                  4.00                4.00               3.00             3.00          2013-03-23 11:05:25.577 1.00
    ME02330   2                  1.00                1.00               3.00             3.00      2013-03-21 13:20:40.793 1.00

    Notem que nas duas primeira linhas do meu resultado vieram dois produtos iguais e na verdade eu quero somente o mais recente alguem consegue me ajudar em como fazer esse select para inserir nessa tabela nova?

    sexta-feira, 19 de abril de 2013 17:29

Respostas

  • Cara, se os dois bancos estiverem no ar, você pode linka-los atravez de um linkdserver, assim você pode consultar as tabelas de um banco para outro. EX:

    -- Criando o Linked Server
    EXEC sp_addlinkedserver   
       @server='banco_01', 
       @srvproduct=N'',
       @provider='SQLNCLI', 
       @datasrc='172.16.7.59'
    
    -- Mapeando um usuário para o Linked Server
    exec sp_addlinkedsrvlogin 
    	@rmtsrvname='banco_02', 
    	@useself = N'false',
    	@locallogin = N'sa',
    	@rmtuser = N'sa',
    	@rmtpassword = 'Imp@ct@'
    
    -- Consultando os Linked Servers criados
    exec sp_helpserver
    
    -- Apagando o linked server e os seus logins
    --exec sp_dropserver p13_2, 'droplogins'
    
    -- Consulta com o Linked Server
    select * from P13_2.pedidos.dbo.clientes
    

    Depois que os bancos estiverem linkados você pode tentar fazer um MERGE, Ex: Tem aqui e não tem ali, traz de la pra cá... segue um exemplo:

    -- HABILITANDO A INSERÇÃO NUM CAMPO IDENTITY
    
    SET IDENTITY_INSERT EMP_TEMP ON
    
    MERGE EMP_TEMP AS ET -- TABELA ALVO
    USING EMPREGADOS AS E -- TABELA FONTE
    ON ET.CODFUN = E.CODFUN
    
    WHEN MATCHED AND E.SALARIO <> ET.SALARIO THEN
    	UPDATE SET ET.SALARIO = E.SALARIO
    	
    WHEN NOT MATCHED THEN
    	INSERT (CODFUN,NOME,NUM_DEPEND,DATA_NASCIMENTO,
    	COD_DEPTO,COD_CARGO,DATA_ADMISSAO,SALARIO,
    	PREMIO_MENSAL,SINDICALIZADO,OBS,FOTO,			COD_SUPERVISOR)
    	VALUES (CODFUN,NOME,NUM_DEPEND,DATA_NASCIMENTO,
    	COD_DEPTO,COD_CARGO,DATA_ADMISSAO,SALARIO,
    	PREMIO_MENSAL,SINDICALIZADO,OBS,FOTO,			COD_SUPERVISOR);
    
    SET IDENTITY_INSERT EMP_TEMP OFF

    Cara, Espero ter ajudado...

    Boa Sorte!

    • Sugerido como Resposta Renato Siqueira sábado, 20 de abril de 2013 14:31
    • Marcado como Resposta eder.luca terça-feira, 23 de abril de 2013 13:55
    sexta-feira, 19 de abril de 2013 21:41