Jump to content

Archived

This topic is now archived and is closed to further replies.

GT.

[Resolvido] Inserir varios registros com 1 insert

Recommended Posts

Bom não sei se é a área correta, minha dúvida é em relação a inserção de varios registros com um insert.

 

To com um problema aqui e preciso resolver ele, segue a tabela abaixo com os registros.

 

Imagem Postada

 

Eu precisava inserir um registro para cada registro existente na mesma tabela.

 

Eu imaginei algo como:

 

INSERT INTO tabela SELECT * from tabela

Mais ainda não é isto que quero, eu queria era inserir a mesma quantidade de registro já existentes so que com os values especificados por min... ex: numero = max(numero) + 1.

 

Alguem saberia fazer isto? séria algo como:

 

INSERT INTO tabela SELECT * from tabela VALUES... ??

Espero ter sido claro, aguardo respostas.

Share this post


Link to post
Share on other sites

GT.

 

Não consegui ver as imagens que você postou, mas vamos ver se é isso que precisa.

Mais ainda não é isto que quero, eu queria era inserir a mesma quantidade de registro já existentes so que com os values especificados por min... ex: numero = max(numero) + 1.

você pode inserir os dados em um tabela já criada ou nao. Exemplo:

Select * into #temp from where tabela where blablabla = 1

só vai inserir na tabela #temp os dados que tem no where.

Não sei se é isso que precisa

 

Abçs

Share this post


Link to post
Share on other sites

GT.

* into sim, eh para criar uma nova tabela, mas você tem dois where;

 

Select * into #temp from where tabela where codigo = 58, nome = 'adsf', numero =160, datahora = '00:00:00'

tem um depois do from que torna seu codigo invalido.

Select * into #temp from tabela where codigo = 58 and nome = 'adsf' and numero =160 and datahora = '00:00:00'

abçs

Share this post


Link to post
Share on other sites

cara acho q você n entendeu o que eu quis no tópico vo psotar a pergunta toda q eu preciso fazer

 

"Fazer um único script que, para cada linha adicionada anteriormente, adicione na tabela outra linha com "NOME" = "NOME" + "NOME", acrescente 37,62% no valor de "NUMERO" e "DATAHORA" seja incrementado em dois dias e 3 horas. O campo chave deve seguir a numeração seqüencial, sem falhas na seqüência nem violação de integridade. Exemplo: INSERT INTO TABELA SELECT ..."

 

a tabela é aquela q postei o link no outro post

 

edit:

 

tive um pouco de progresso

 

INSERT INTO Tabela

SELECT 156 ,'adsf' , 123, '12:10:00'

 

bom assim conseugir adicionar dados com um select... agora me falta um loop para adicionar os registros de acordo com os q ja tem

Share this post


Link to post
Share on other sites

GT.

tem como você postar a estrutura das tabelas de origem (insert) e a que esta fazendo o select, junto com um exemplo do que precisa?!

Juro que to tentando entender, mas a semana do carnaval esta brava e o cerebro nao que funcionar ;)

 

Abçs

Share this post


Link to post
Share on other sites

Desculpe a demora... facul.

 

Bom eu criei uma tabela simples:

 

create table TABELA(
CODIGO int not null primary key,
NOME varchar(50),
NUMERO real,
DATAHORA datetime
);

Depois inseri os dados:

 

 

insert into TABELA (CODIGO,NOME,NUMERO,DATAHORA) values (1,'A',1,'2006-01-15')

insert into TABELA (CODIGO,NOME,NUMERO,DATAHORA) values (2,'B',2,'2006-01-15 03:00')

insert into TABELA (CODIGO,NOME,NUMERO,DATAHORA) values (3,'C',3,'2006-03-15 06:00')

insert into TABELA (CODIGO,NOME,NUMERO,DATAHORA) values (4,'D',4,'2006-05-15 12:00')

insert into TABELA (CODIGO,NOME,NUMERO,DATAHORA) values (5,'E',5,'2006-04-15 18:00')

insert into TABELA (CODIGO,NOME,NUMERO,DATAHORA) values (6,'F',6,'2006-06-15 21:00')

Ai vem a questão que eu to perdido:

 

3 - Fazer um único script que, para cada linha adicionada anteriormente, adicione na tabela outra linha com "NOME" = "NOME" + "NOME", acrescente 37,62% no valor de "NUMERO" e "DATAHORA" seja incrementado em dois dias e 3 horas. O campo chave deve seguir a numeração seqüencial, sem falhas na seqüência nem violação de integridade. Exemplo: INSERT INTO TABELA SELECT ...

 

Eu fiz algo assim:

 

DECLARE @intMaxCodigo INT
DECLARE @intNumero INT
DECLARE @strNome varchar(50)
DECLARE @dtDataHora datetime
SET @intMaxCodigo  = (SELECT MAX(Codigo) FROM Tabela)
set @intNumero = (SELECT max(numero) FROM Tabela)
set @strNome = (SELECT min(nome) FROM Tabela)
set @dtDataHora = (SELECT MAX(datahora) FROM Tabela)
INSERT INTO Tabela
SELECT  @intMaxCodigo + 1, @strNome + @strNome , @intNumero * 1.3762,  @dtDataHora + 4 day

Mais depois disso fiquei perdido.

Share this post


Link to post
Share on other sites

Muito obrigado a todos, problema resolvido.

 

Agora estou a ler um livro de ansi sql para aprender mais.

Share this post


Link to post
Share on other sites

GT.

 

Poderia postar como resolveu seu problema? Pode ser util para alguém ;p

 

Abçs e boa sorte na leitura

Share this post


Link to post
Share on other sites

Desculpe não ter retornado com a resposta.

 

Foi só tacar um while e duas variaveis para o controle do loop.

 

DECLARE @intMaxCodigo INT
DECLARE @intMaxNumero INT
DECLARE @strNome VARCHAR(50)
DECLARE @dtDataHora DATETIME
DECLARE @j INT
DECLARE @i INT
SET @i = 0
SET @j = (SELECT MAX(Codigo) FROM Tabela)
WHILE @i < @j
BEGIN
SET @intMaxCodigo  = (SELECT MAX(Codigo) FROM Tabela)
SET @intMaxNumero  = (SELECT MAX(numero) FROM Tabela)
SET @strNome       = (SELECT (nome) FROM Tabela WHERE CODIGO = @i + 1)
SET @dtDataHora    = (SELECT MAX(datahora) FROM Tabela)
SET @i = @i + 1
INSERT INTO Tabela
SELECT  @intMaxCodigo + 1, @strNome + @strNome , @intMaxNumero * 1.3762,  @dtDataHora + 4 day
END;

Só não tem as horas nesse código pois não lembro como fiz...

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.