none
Exibição aleatória de dados de uma tabela RRS feed

  • Pergunta

  • Olá,

    Tenho a seguinte procedure:

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[USP_EI_03_Usinas_Ofertas_Relatorio_Vendas]

     @QtdePagina As Int,
     @PagAtual As Int,
     @vch_Top as int,
     @vch_neg as int,
     @TotalArtigos As Int OUTPUT

     AS

     DECLARE @ch_cod AS Int
     DECLARE @Empresa As Varchar(100)
     DECLARE @Categoria As Varchar(50)
     DECLARE @Descricao varchar(250)
     DECLARE @Observacoes varchar(max)
     DECLARE @Cidade varchar(50)
     Declare @Estado varchar(50)
     DECLARE @Data_cadastro as Datetime
     DECLARE @Data_termino as Datetime
     DECLARE @Desc_top As Varchar(50)
     DECLARE @ch_rec AS Int
     DECLARE @ch_top AS Int
     DECLARE @QtdeInicial As Int
     DECLARE @Contador As Int

     SET @QtdeInicial = 0
     SET @Contador = 0

     SET NOCOUNT ON

     CREATE TABLE #ArtigosTemp
      (
      ch_cod int,
      empresa Varchar(100),
      categoria varchar(50),
      descricao varchar(250),
      Observacoes varchar(max),
      cidade varchar(100),
      estado varchar(500),
      data_Cadastro datetime,
      Data_termino datetime,
      Desc_top varchar(50),
      ch_rec int,
      ch_top int
      )

     DECLARE curPaginacaoArtigos CURSOR FAST_FORWARD FOR
     SELECT tb02.ch_cod,tb02.Empresa,tb02.Categoria,tb02.Descricao,tb02.Observacoes,tb02.cidade,tb02.estado,tb02.Data_Cadastro, tb02.Data_termino,tb03.Desc_top, tb02.ch_rec, tb03.ch_top
     from Tb_EU_01_Usinas_Topicos tb03,Tb_Pec_02_Usinas_Ofertas_Negocios tb02 where  tb03.ch_top = tb02.ch_rec AND tb03.ch_top = @vch_top AND tb02.ch_neg = @vch_neg order by ch_cond desc


     OPEN curPaginacaoArtigos
     FETCH NEXT FROM curPaginacaoArtigos
     INTO @CH_COD, @Empresa, @Categoria, @Descricao, @Observacoes,  @Cidade, @Estado, @Data_Cadastro, @Data_termino, @Desc_top, @ch_rec,@ch_top

     WHILE @@FETCH_STATUS = 0
     BEGIN
     IF @QtdeInicial >= (@PagAtual * @QtdePagina) - @QtdePagina
     BEGIN
     INSERT INTO #ArtigosTemp VALUES(@CH_COD, @Empresa, @Categoria, @descricao, @Observacoes, @Cidade, @Estado, @Data_cadastro, @Data_termino, @Desc_top, @ch_rec, @ch_top)
     SET @Contador = @Contador + 1

     IF @Contador >= @QtdePagina
     BREAK
     END
     SET @QtdeInicial = @QtdeInicial + 1

     FETCH NEXT FROM curPaginacaoArtigos
     INTO @CH_COD, @Empresa, @Categoria, @Descricao, @Observacoes, @Cidade, @Estado, @Data_Cadastro, @Data_termino, @Desc_top, @ch_rec, @ch_top
     END

     CLOSE curPaginacaoArtigos
     DEALLOCATE curPaginacaoArtigos

     SELECT ch_cod, Empresa, Categoria, Descricao, Observacoes,  Cidade, Estado, Data_Cadastro, Data_termino, Desc_top, ch_rec, ch_top FROM #ArtigosTemp

     DROP TABLE #ArtigosTemp

     SET NOCOUNT OFF

     SET @TotalArtigos = (SELECT COUNT(ch_cod) FROM Tb_Pec_02_Usinas_Ofertas_Negocios where  ch_rec = @Vch_top AND ch_neg = @vch_neg)
     if @TotalArtigos is null
     set @TotalArtigos = 0

    Este select faz a Busca para exibição e traz os dados baseados no order by:

    SELECT tb02.ch_cod,tb02.Empresa,tb02.Categoria,tb02.Descricao,tb02.Observacoes,tb02.cidade,tb02.estado,tb02.Data_Cadastro, tb02.Data_termino,tb03.Desc_top, tb02.ch_rec, tb03.ch_top
     from Tb_EU_01_Usinas_Topicos tb03,Tb_Pec_02_Usinas_Ofertas_Negocios tb02 where  tb03.ch_top = tb02.ch_rec AND tb03.ch_top = @vch_top AND tb02.ch_neg = @vch_neg order by ch_cond desc

    Como faço para tornar a exibição dos dados da busca aleatória, para cada busca executada trazer os registros em ordem aleatória e não sequencial como esta:

    Grato

    Dirceu M. Azevedo


    Dirceu Martins de Azevedo Grupo e-usinas Piracicaba/SP MSN:dirceuazevedo@hotmail.com SKYPE: dirceu.martins.azevedo

    sexta-feira, 4 de maio de 2012 01:49

Respostas

  • Olá Dirceu, bom dia.

    Inclui no final do select a clausula ORDER NEWID()

    select * from tablaname order by newid()

    mas tome cuidado se a  tabela tiver muitas linhas. Poderá ficar lento. Talvez para resolver o problema de perfomance, vc pode incluir um top N em sua consulta.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    sexta-feira, 4 de maio de 2012 14:36