DUPLICAR REGISTROS NO SQL SERVER

 Tópico anterior Próximo tópico Novo tópico

DUPLICAR REGISTROS NO SQL SERVER

SQL / DATABASE

 Compartilhe  Compartilhe  Compartilhe
#496764 - 17/04/2021 13:56:37

JCM0867
BALNEARIO CAMBORIU
Cadast. em:Março/2012


OLá pessoal

Digamos que tenho a seguinte query:
'Select ROW_NUMBER() OVER(ORDER BY Campo1) as id, Campo1, Campo2, Campo3 From MinhaTabela where...'

Ele resultará sempre um registro:
1   aaa   bbb   ccc

Como faço na query para ele duplicar por exemplo 5x, resultando:
1  aaa  bbb  ccc
2  aaa  bbb  ccc
3  aaa  bbb  ccc
4  aaa  bbb  ccc
5  aaa  bbb  ccc

Grato






Resposta escolhida #496765 - 17/04/2021 20:14:03

ELUCIMAR
GOIANIA
Cadast. em:Dezembro/2003


Boa noite! Veja se isso te atende:

-- Tabela dados de teste
IF OBJECT_ID('tempdb..#MinhaTabela') IS NOT NULL DROP TABLE #MinhaTabela
Create Table #MinhaTabela
(
    Codigo int primary key,
    Campo1 varchar(50),
    Campo2 varchar(50),
    Campo3 varchar(50)
)
Insert into #MinhaTabela(Codigo,Campo1,Campo2,Campo3) Values(1,'aaa','bbb','ccc');
Insert into #MinhaTabela(Codigo,Campo1,Campo2,Campo3) Values(2,'ddd','eee','fff');
Insert into #MinhaTabela(Codigo,Campo1,Campo2,Campo3) Values(3,'ggg','hhh','iii');
Insert into #MinhaTabela(Codigo,Campo1,Campo2,Campo3) Values(4,'jjj','lll','mmm');
Insert into #MinhaTabela(Codigo,Campo1,Campo2,Campo3) Values(5,'nnn','ooo','ppp');

Declare
@StringSelect varchar(max),
@Sql varchar(max) = '',
@QuantRegDuplicados int = 5,
@Reg int = 1

-- Solução 1
Set @StringSelect = 'Select Campo1, Campo2, Campo3 From #MinhaTabela where Codigo = 1'
While(@Reg <= @QuantRegDuplicados)
Begin
    set @Sql = @Sql + @StringSelect + Case When @Reg < @QuantRegDuplicados Then ' Union All ' else '' End
    Set @Reg = @Reg + 1
End
Exec('Select ROW_NUMBER() OVER(ORDER BY Campo1) as id,Campo1, Campo2, Campo3 From(' + @Sql + ')as Tmp')

-- Solução 2
Declare @TabelaTempRetorno Table
(
    Campo1 varchar(50),
    Campo2 varchar(50),
    Campo3 varchar(50)
)
Insert into @TabelaTempRetorno(Campo1,Campo2,Campo3)
Select Campo1, Campo2, Campo3 From #MinhaTabela where Codigo = 1
Set @Reg = 1
While(@Reg < @QuantRegDuplicados)
Begin
    Insert into @TabelaTempRetorno(Campo1,Campo2,Campo3)
    Select Top 1 Campo1,Campo2,Campo3 From @TabelaTempRetorno
    Set @Reg = @Reg + 1
End
Select ROW_NUMBER() OVER(ORDER BY Campo1) as id,Campo1, Campo2, Campo3 From @TabelaTempRetorno



E.A.M

Cursos de Excel e VB6:
cursoexcelvba.com.br



#496766 - 18/04/2021 11:28:02

JCM0867
BALNEARIO CAMBORIU
Cadast. em:Março/2012


Última edição em 18/04/2021 11:44:13 por JCM0867

Opa,
Penso em algo sem loop, numa query só, será que tem como?
Loop até saberia fazer apenas usando a tabela e um insert 5x
Tua solução funciona bem

Será implementado no MVC
Vou tentar implementar teus código




 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por JCM0867 em 23/04/2021 22:45:52