none
Consultar e inserir dados RRS feed

  • Pergunta

  • Preciso fazer o seguinte:

     

    SELECT ContasPagas.*, Year([DtPagamento])*100+Month([DtPagamento]) AS AnoMesPag,

    CASE [TpInternacao] WHEN 5 THEN 'NaoIntern' ELSE 'Intern' END AS TpIntern

    INTO ContasPagas

    FROM ContasPagas

    INNER JOIN a01_Beneficiarios ON ContasPagas.IdBeneficiario = a01_Beneficiarios.IdBeneficiario

    WHERE ContasPagas.DtPagamento Between '20080101' And '20080701'

     

     

    no ACCESS isso já funciona, ele pega todos os registros da Tabela ContasPagas, adiciona as informações a seguir e recria a tabela com todos os registros adicionando +2 campos conforme mostra a instrução, no SQL Server já estou horas tentando fazer e não funciona, alguém pode me ajudar?

    sexta-feira, 18 de julho de 2008 17:18

Todas as Respostas

  • Carlos,

     

    O SELECT INTO neste caso não vai funcionar. O SQL Server não vai recriar a tabela com dois novos campos. Ele vai entender que você quer apenas adicionar registros em uma tabela já existente, mas por ela ainda não possuir os novos campos, exibirá um erro.

     

    Ou você dá o SELECT INTO criando uma NOVA tabela (com um nome diferente da já existente), ou você altera a tabela antes, incluindo os dois novos campos, e só depois realiza a inserção.

     

    Um abraço,

    Raul Santos

    sexta-feira, 18 de julho de 2008 17:26
  •  

    sim pensei no ALTER TABLE, mas como atualizo a tabela, como faço o update para que ele verifique o relacionamento e atualize linha a linha?
    sexta-feira, 18 de julho de 2008 17:30
  • Boa Noite,

     

    Se a tabela for transiente, ou seja, a tabela não tem relacionamentos e serve apenas para dados transitórios, você pode fazer o seguinte:

     

    Code Snippet

    SELECT ContasPagas.*, Year([DtPagamento])*100+Month([DtPagamento]) AS AnoMesPag,

    CASE [TpInternacao] WHEN 5 THEN 'NaoIntern' ELSE 'Intern' END AS TpIntern

    INTO ContasPagas2

    FROM ContasPagas

    INNER JOIN a01_Beneficiarios ON ContasPagas.IdBeneficiario = a01_Beneficiarios.IdBeneficiario

    WHERE ContasPagas.DtPagamento Between '20080101' And '20080701'

     

    DROP TABLE ContasPagas

     

    sp_rename 'ContasPagas2', 'ContasPagas'

     

     

    Isso irá gerar uma nova tabela, excluir a antiga e renomear a nova para a antiga. É uma técnica comum para acelerar carga de dados, mas não é adequada a todas as situações. Se a idéia é realmente popular os campos após um ALTER TABLE tente o seguinte:

     

    Code Snippet

    UPDATE ContasPagas SET

    AnoMesPag = Year(Pag.[DtPagamento])*100+Month(Pag.[DtPagamento]),

    TpIntern = CASE Pag.[TpInternacao] WHEN 5 THEN 'NaoIntern' ELSE 'Intern' END

    FROM

    FROM ContasPagas As Pag

    INNER JOIN ContasPagas ON Pag.Chave = ContasPagas.Chave

    INNER JOIN a01_Beneficiarios ON Pag.IdBeneficiario = a01_Beneficiarios.IdBeneficiario

    WHERE Pag.DtPagamento Between '20080101' And '20080701'

     

    [ ]s,

     

    Gustavo

    sábado, 19 de julho de 2008 23:50