none
Query com WHILE demorando para ser executada RRS feed

  • Pergunta

  • Estou com um problema na query abaixo, a mesma demora para executar, porém se ao invés de usar select eu usar o PRINT a mesma retornar o resultado em menos de 1 segundo

    DECLARE @Counter Int,@TESTE INT,
            @IDTEMPO int
    SET @IDTEMPO = 1
    SET @TESTE = 400
    SET @Counter = 1
    WHILE @Counter <= @TESTE
       BEGIN
        SELECT @IDTEMPO
        SET @Counter = @Counter + 1
       END   

    segunda-feira, 20 de agosto de 2012 11:55

Respostas

  • Bom Dia,

    Não creio que essa seja a melhor forma de providenciar etiquetas. A geração de 2000 resultsets será lenta para qualquer um processar (seja o SSMS, seja uma aplicação em .NET ou um serviço em Java). Aplicações profissionais de etiquetas não geram um resultset para cada etiqueta, mas fazem a consulta dos dados uma única vez e imprimem em tela segmentado por etiquetas.

    O Reporting Services seria muito útil para fazer algo nesse sentido. Opcionalmente você pode usar o WORD para gerar as etiquetas com base em um cadastro no SQL Server (ou exportar do SQL Server para outro formato como Access ou Excel e consumir a partir do Word).

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    • Marcado como Resposta linoba segunda-feira, 20 de agosto de 2012 17:00
    segunda-feira, 20 de agosto de 2012 15:53

Todas as Respostas

  • Bom Dia,

    A exibição de cada valor em GRID certamente é mais lenta que a exibição em texto. Não porque a query é lenta, mas porque a ferramenta (possivelmente o SSMS) é lenta na exibição, afinal são 400 resultsets. Qual o propósito de exibir 400 resultsets ?

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    segunda-feira, 20 de agosto de 2012 12:10
  • Normal, o print é usado apenas pra tratar erros, no seu caso está certo, ele vai demorar mesmo para trazer a consulta pois ai está contando 400x e trazendo as 400 contagens.
    segunda-feira, 20 de agosto de 2012 12:11
  • Esse select é apenas para exemplificar a situação, mas eu preciso usar algo semelhante para usar em impressão de etiquetas, no caso o usuario iria informar a quantidade.... por isso utilizei 400, sendo que na verdade eu precisaria de 2 mil pra cima

    Att

    segunda-feira, 20 de agosto de 2012 15:30
  • Bom Dia,

    Não creio que essa seja a melhor forma de providenciar etiquetas. A geração de 2000 resultsets será lenta para qualquer um processar (seja o SSMS, seja uma aplicação em .NET ou um serviço em Java). Aplicações profissionais de etiquetas não geram um resultset para cada etiqueta, mas fazem a consulta dos dados uma única vez e imprimem em tela segmentado por etiquetas.

    O Reporting Services seria muito útil para fazer algo nesse sentido. Opcionalmente você pode usar o WORD para gerar as etiquetas com base em um cadastro no SQL Server (ou exportar do SQL Server para outro formato como Access ou Excel e consumir a partir do Word).

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    • Marcado como Resposta linoba segunda-feira, 20 de agosto de 2012 17:00
    segunda-feira, 20 de agosto de 2012 15:53