Recentemente no trabalho, meu amigo Cicero estava precisando elaborar um relatorio para impressao de etiquetas. Ate ai tudo bem, tarefa trivial para quem sabe fazer relatorios complexos como e o caso do Cicero.A coisa so complicou porque era para imprimir apenas um item por "n" vezes. Ou seja, o usuario iria selecionar um produto e informar o numero de etiquetas que seriam impressas para este item.Geralmente, no trabalho, a ideia e resolver tudo com uma SQL que retorne um rowset e ponto final. Voce faz o databound no relatorio e zero codigo precisa ser escrito no corpo do relatorio ja que o engine e de um fabricante muito usado.O problema era: como gerar um conjunto de linhas com uma consulta SQL (de preferencia do jeito preguicoso)?Conceitos envolvidosSe voce estiver querendo dar aula ou entender mais profundamente os conceitos, eis aqui a lista e os links para a documentacao oficial:Variaveis no SQLSQL INSERTWHILESe voce quiser, por outro lado, fazer isso do jeito dificil, outros artigos abaixo:Repeating a SQL row based on a value in a different columnSQL Repeat Rows N Times According to Column ValuePara fazer isso resolvi o problema com os passos abaixo:1. Foi usada uma variavel para ser incrementada pelo numero de repeticoes desejado.declare @repeat as int=0;declare @temp as table (name varchar(50));2. Foi criado um loop que preenche uma tabela temporario (usando uma table variable) pelo numero de vezes desejado.while @repeat < 10begin insert into @temp select name from Production.product where name = 'blade'; set @repeat=@repeat+1;end3. Ao termino do loop, foi enviada uma consulta SELECT para a tabela temporaria que traz os resultados desejados.select * from @tempNo exemplo, eu demonstrei como repetir a coluna Name da tabela Production.Products do banco de dados AdventureWorks2012 da Microsoft. A primeira parte sao criadas as variaveis necessarias.O resultado segue abaixo.E funciona? Quer dizer, em um programa?Sim, o codigo abaixo (que nao vou explicar agora... estou com preguica...) demonstra a utilizacao da consulta acima em um programa Windows Forms.void Main(){ // SQL Server Repeat Rows generateForm();}// Define other methods and classes herevoid generateForm(){ var frm = new System.Windows.Forms.Form { Width = 300, Height = 300, Text = "Exemplo" }; var lst = new System.Windows.Forms.ListBox { Dock = System.Windows.Forms.DockStyle.Fill }; frm.Controls.Add(lst); getRows(lst); frm.ShowDialog();}void getRows(System.Windows.Forms.ListBox lst) { lst.DataSource = getDataRows();} List getDataRows() { using(var con = new SqlConnection(@"Data source=.\sqlexpress; initial catalog=AdventureWorks2012; Integrated security=true")) { using(var cmd = new SqlCommand("", con)) { cmd.CommandText = @" declare @repeat as int=0; declare @temp as table (name varchar(50)); while @repeat < 10 begin insert into @temp select name from Production.product where name = 'blade'; set @repeat=@repeat+1; end; select * from @temp; "; con.Open(); var reader = cmd.ExecuteReader(); var lst = new List(); while (reader.Read()) { lst.Add(reader["name"].ToString()); } con.Close(); return lst; } }} Acreditevoce ou nao, mais desde que a luta entre Anderson Silva e Chris Weidman foimarcada, Spider vem sendo considerado o azarao por diversas pessoas ligadas aoUFC, luta essa marcada para o proximo sabado (06/07). Isso porque, segundoespecialistas o ponto mais fraco de Anderson e a capacidade de se defender dequedas, principal arma utilizada pelo desafiante.Foto:Esther Lin / MMA FightingWeidmane conhecido