Inquiridor
Consultar e inserir dados

Pergunta
-
Preciso fazer o seguinte:
SELECT
ContasPagas.*, Year([DtPagamento])*100+Month([DtPagamento]) AS AnoMesPag,CASE
[TpInternacao] WHEN 5 THEN 'NaoIntern' ELSE 'Intern' END AS TpInternINTO
ContasPagasFROM
ContasPagasINNER
JOIN a01_Beneficiarios ON ContasPagas.IdBeneficiario = a01_Beneficiarios.IdBeneficiarioWHERE
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?
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
-
-
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 SnippetSELECT
ContasPagas.*, Year([DtPagamento])*100+Month([DtPagamento]) AS AnoMesPag,CASE
[TpInternacao] WHEN 5 THEN 'NaoIntern' ELSE 'Intern' END AS TpInternINTO
ContasPagas2FROM
ContasPagasINNER
JOIN a01_Beneficiarios ON ContasPagas.IdBeneficiario = a01_Beneficiarios.IdBeneficiarioWHERE
ContasPagas.DtPagamento Between '20080101' And '20080701'DROP
TABLE ContasPagassp_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 SnippetUPDATE
ContasPagas SETAnoMesPag
= Year(Pag.[DtPagamento])*100+Month(Pag.[DtPagamento]),TpIntern
= CASE Pag.[TpInternacao] WHEN 5 THEN 'NaoIntern' ELSE 'Intern' ENDFROM
FROM
ContasPagas As PagINNER
JOIN ContasPagas ON Pag.Chave = ContasPagas.ChaveINNER
JOIN a01_Beneficiarios ON Pag.IdBeneficiario = a01_Beneficiarios.IdBeneficiarioWHERE
Pag.DtPagamento Between '20080101' And '20080701'[ ]s,
Gustavo
- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 5 de setembro de 2015 00:58