COPIAR TABELAS

NEOBH 01/11/2011 15:33:18
#388285
Ola a todos!

Pessoal, estou querendo copiar os dados de uma tabela para o outra tabela.
Hoje estou utilizando o seguinte comando.

select * into novatabela from tbltabela_antiga

Porem se eu fizer isto, os indexes, forekeys e constantes não vão.

Algum sabe me dizer se exite outra maneira?

Grato,
LROSSI 01/11/2011 17:28:15
#388301
tenta fazer um procedimento [Ô]procedure[Ô] que a partir do seu select faça o loop e que insira na tabela... deve funcionar...
vou mandar um exemplo do MySQL..
espero ter ajudado... dessa forma, eu calculo a composição e estoque dos itens... não tirei nada pra vc entender a estrutura...
  
BEGIN

DECLARE semLinhas BOOLEAN;
DECLARE i INT Default 0;
DECLARE done INT DEFAULT 0;
declare inserido INT default 0;
declare idProdutoComposto INT default 0;
DECLARE Qtde DECIMAL(10,3) Default 0;
DECLARE pc CURSOR FOR
SELECT pc.idprodutocomposto as idProduto, (sum(qtdecomposto)/sum(fator)) AS qtde
FROM produtoscomposicao AS pc
INNER JOIN vendasprodutoscomposicao AS vpc ON vpc.idProdutoComposto=pc.idProduto
INNER JOIN vendasprodutos AS vp ON vp.idVenda=vpc.idvenda and vp.idproduto=vpc.idproduto
WHERE pc.status=0 AND pc.idproduto=vIdProduto
group by pc.idprodutocomposto;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET semLinhas = TRUE;

DROP TABLE IF EXISTS tmpcontagemcomposicao;

OPEN pc;
atualizaComposicao: LOOP
FETCH pc
INTO idProdutoComposto, Qtde;
IF semLinhas THEN
CLOSE pc;
LEAVE atualizaComposicao;
END IF;
select ifnull(max(idproduto),0) from estoque where idproduto=idProdutoComposto into inserido;
if (inserido=0) then
insert into estoque(idproduto, idempresa, composicao)
values (idProdutoComposto, vidEmpresa, qtde);
else
update estoque
set composicao=Qtde
where idproduto=idProdutoComposto and idempresa=vidEmpresa;
end if;
BEGIN

DECLARE semLinhas BOOLEAN;
DECLARE i INT Default 0;
DECLARE done INT DEFAULT 0;
declare inserido INT default 0;
declare idProdutoComposto INT default 0;
DECLARE Qtde DECIMAL(10,3) Default 0;
DECLARE pc CURSOR FOR
SELECT pc.idprodutocomposto as idProduto, (sum(qtdecomposto)/sum(fator)) AS qtde
FROM produtoscomposicao AS pc
INNER JOIN vendasprodutoscomposicao AS vpc ON vpc.idProdutoComposto=pc.idProduto
INNER JOIN vendasprodutos AS vp ON vp.idVenda=vpc.idvenda and vp.idproduto=vpc.idproduto
WHERE pc.status=0 AND pc.idproduto=vIdProduto
group by pc.idprodutocomposto;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET semLinhas = TRUE;

DROP TABLE IF EXISTS tmpcontagemcomposicao;

OPEN pc;
atualizaComposicao: LOOP
FETCH pc
INTO idProdutoComposto, Qtde;
IF semLinhas THEN
CLOSE pc;
LEAVE atualizaComposicao;
END IF;
select ifnull(max(idproduto),0) from estoque where idproduto=idProdutoComposto into inserido;
if (inserido=0) then
insert into estoque(idproduto, idempresa, composicao)
values (idProdutoComposto, vidEmpresa, qtde);
else
update estoque
set composicao=Qtde
where idproduto=idProdutoComposto and idempresa=vidEmpresa;
end if;
/* calcula o estoque do item composto */
call rContaEstoque(idProdutoComposto, vidEmpresa);
END LOOP atualizaComposicao;

END
call rContaEstoque(idProdutoComposto, vidEmpresa);
END LOOP atualizaComposicao;

END
NETMANIA 01/11/2011 17:30:39
#388302
Primeiro você terá que criar a tabela via comando, depois, você pode usar o comando INSERT INTO nova_tabela SELECT * FROM tabela_antiga para migrar o dados. Mas vai uma coisa importante. Se a nova tabela tiver comando de auto incremento (em especial no SQL Server), esta não irá deixar você adicioanr o campo com esta informação da tabela antiga, ao menos que você configure a nova tabela para permitir valores duplicados.
NEOBH 04/11/2011 08:34:01
#388440
Infelizmente tente os métodos acima porem sem sucesso.
PARREIRA 10/11/2011 11:53:12
#388885
Cria uma replicação.
Ela ira criar uma cópia exata do seu banco.
NEOBH 10/11/2011 20:39:58
#388922
Mas como posso criar um replica?
OMAR2011 11/11/2011 07:43:03
#388926
Baixe o Sqlmanger do seu Banco,instale e duplique sua tabela.
PARREIRA 22/11/2011 13:17:39
#389715
me mande um email, caso ainda não tenha feito eu lhe oriento.
fab_parreira@itelefonica.com.br
Tópico encerrado , respostas não são mais permitidas