none
Replicar resultado de una consulta SQL RRS feed

  • Pregunta

  • Buenas,

    Estoy intentando que la siguiente consulta me arroje por ejemplo 10 registros sin el uso de un cursor y no lo estoy logrando. Me podrán dar una mano?

    select (ABS(CHECKSUM(RAND())) % 49) + 1

    Gracias
    Ruba
    lunes, 25 de octubre de 2010 20:03

Respuestas

  • Hola.

    Ello no te va a evitar tener que realizar 10 llamadas a la función Rand para obtener números diferentes. Una forma simple sería hacerlo así:

    select 
     R1 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R2 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R3 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R4 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R5 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R6 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R7 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R8 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R9 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R10 = (ABS(CHECKSUM(RAND())) % 49) + 1
    


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    • Marcado como respuesta Rubénbd lunes, 25 de octubre de 2010 20:48
    lunes, 25 de octubre de 2010 20:34
    Moderador
  • No se si les servirá, pero estuve investigando un poco en la web como podía solucionar el problema y lo hice de la siguiente manera:

    declare @t table (id int)

    declare @num int,
            @otro int

     set @num=0
     while @num<=49
        begin
          select @otro = (ABS(CHECKSUM(NEWID())) % 49) + 1
          insert into @t values (@otro)
          set @num=@num+1
    end
    select * from @t

     


    Ruba
    • Marcado como respuesta Rubénbd martes, 26 de octubre de 2010 12:39
    martes, 26 de octubre de 2010 12:39

Todas las respuestas

  • Hola.

    Ello no te va a evitar tener que realizar 10 llamadas a la función Rand para obtener números diferentes. Una forma simple sería hacerlo así:

    select 
     R1 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R2 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R3 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R4 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R5 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R6 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R7 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R8 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R9 = (ABS(CHECKSUM(RAND())) % 49) + 1,
     R10 = (ABS(CHECKSUM(RAND())) % 49) + 1
    


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    • Marcado como respuesta Rubénbd lunes, 25 de octubre de 2010 20:48
    lunes, 25 de octubre de 2010 20:34
    Moderador
  • Muchas Gracias qwalgrande, me suponía que no existía nada.
    Ruba
    lunes, 25 de octubre de 2010 20:48
  • No se si les servirá, pero estuve investigando un poco en la web como podía solucionar el problema y lo hice de la siguiente manera:

    declare @t table (id int)

    declare @num int,
            @otro int

     set @num=0
     while @num<=49
        begin
          select @otro = (ABS(CHECKSUM(NEWID())) % 49) + 1
          insert into @t values (@otro)
          set @num=@num+1
    end
    select * from @t

     


    Ruba
    • Marcado como respuesta Rubénbd martes, 26 de octubre de 2010 12:39
    martes, 26 de octubre de 2010 12:39