Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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.

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado a todos, problema resolvido.

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

GT.

 

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

 

Abçs e boa sorte na leitura

Compartilhar este post


Link para o post
Compartilhar em outros 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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.