¿Cómo puedo rellenar una columna de tipo int, actualmente vacía, con números aleatorios sin que se repitan?

  • Cuántos números? ¿Qué deberían los números estar? Que motor de base de datos?
  • Números aleatorios sin duplicados no son números aleatorios.
  • microsoft sql server
  • «Números aleatorios sin duplicados no son números al azar.» Eso no es correcto. Puedes realizar un muestreo aleatorio sin reemplazo. Por ejemplo, esta es la forma política de votación se hace, cuando se hace correctamente.
  • Reynolds: Cuidado de poner su definición de azar contra la mía en un criptográficos enfrentamiento con su identidad en línea?
  • Seguro. Una búsqueda en Google sobre «distribución hipergeométrica». Sin duda puede crear un generador de números aleatorios, donde se muestreo sin reemplazo.
  • Reynolds: busqué en Google…bueno leer, pero yo todavía no lo entiendo. Es probablemente mi fallando, no el tuyo. Puede usted explicar cómo muestreo sin reemplazo de una población de 10 producirá un criptográficamente segura mensaje del 10? Si usted enviar mensajes mediante 1,2,3,4,5,6,7,8 y 9 y Eva es capaz de deducir que, ¿cómo es el mensaje del 10 de supuestamente estar seguro? Si yo uniforme de muestra de 1 a 10, incluso si Eva conoce mi primer 9 teclas ella no puede deducir el 10 de diciembre.
  • ¿Qué tiene que ver con la unidad de descontaminación de la pregunta? Él quiere que los números aleatorios sin que se repitan. ¿Incluso leer la pregunta?
  • Reynolds: Gracias.
  • Uh, eres bienvenido? ¿Leyó la pregunta?
  • Azar no implica la seguridad criptográfica. Si eres de muestreo de un número aleatorio en el rango [1, 10], no es criptográficamente seguro, independientemente del número elegido, porque va a tomar en la mayoría de los 10 intentos de adivinar correctamente. Del mismo modo, la elección de los 9 números sin duplicados es tan segura como la elección número 1 sin duplicados. Esencialmente, se trata de la misma operación. Pero, de nuevo, la seguridad criptográfica no es el problema. La aleatoriedad es. Si el usuario quiere un conjunto de no duplicar los números, el ruido de los números todavía puede ser al azar.

InformationsquelleAutor | 2009-05-10

2 Comentarios

  1. 1

    Supongo que se podría hacer de la columna de clave primaria para evitar duplicados, aunque ese es un tipo de hack. Usted puede quitar la clave más tarde.

    ---- Create the variables for the random number generation
    DECLARE @Random INT;
    DECLARE @Upper INT;
    DECLARE @Lower INT;
    DECLARE @Index integer
    
    ---- This will create a random number between 1 and 999
    SET @Lower = 1 ---- The lowest random number
    SET @Upper = 999 ---- The highest random number
    SET @Index = 0 --- A while loop counter
    
    --- Loop from 0 to 10
    WHILE @Index < 10
    BEGIN
      SELECT 'loop counter = ', @index
      SELECT @Random = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0)
      --Insert @Random here.
      SET @index = @index + 1
    END
    • Bueno, a pesar de que desde el OP pidió «no duplicados», usted probablemente debería usar una SI NO EXISTE, en algún lugar…
  2. 9

    Si se trata de una tabla existente a la que se agrega una nueva columna de tipo INT, se puede hacer algo como esto:

    UPDATE MyTable
    SET MyIntColumn = CONVERT(int, RAND(CHECKSUM(NEWID())) * 10000);

    Esto llenará el vacío de la columna con números aleatorios entre 1 y 10000.

    • Creo que el rango estaría entre 0 y 9999, pero este funciona muy bien. Me pregunto lo que está haciendo, aunque… sin la CHECKSUM(NEWID()) parte que acaba de llegar al mismo número para siempre. Supongo que usted necesita para semillas con diferentes valores para obtener diferentes valores?

Dejar respuesta

Please enter your comment!
Please enter your name here