sql >> Database >  >> RDS >> Sqlserver

Genereer willekeurige int-waarde van 3 tot 6

Een handige editor heeft de 'Select' voor elke instructie toegevoegd, maar het punt van dit item is dat het unieke sleutels kan genereren voor elke rij in een return, niet slechts één item (daarvoor zou ik de functie Rand() gebruiken). Bijvoorbeeld :Selecteer top 100 Rand(),* uit tblExample

Zou dezelfde willekeurige waarde retourneren voor alle 100 rijen.

Terwijl:Selecteer top 100 ABS(CHECKSUM(NEWID()) % 10),* uit tblexample

Zou een andere willekeurige waarde tussen 0 en 9 retourneren op elke rij in de return. Dus terwijl select het gemakkelijker maakt om te kopiëren en plakken, kun je de logica naar een select-statement kopiëren als dat is wat nodig is.

Dit genereert een willekeurig getal tussen 0-9

SELECT ABS(CHECKSUM(NEWID()) % 10)

1 t/m 6

SELECT ABS(CHECKSUM(NEWID()) % 6) + 1

3 tot en met 6

SELECT ABS(CHECKSUM(NEWID()) % 4) + 3

Dynamisch (gebaseerd op de opmerking van Eilert Hjelmeseth, bijgewerkt om bug op te lossen (+ tot -))

SELECT ABS(CHECKSUM(NEWID()) % (@max - @min - 1)) + @min

Bijgewerkt op basis van opmerkingen:

  • NEWID genereert willekeurige string (voor elke rij in ruil)
  • CHECKSUM neemt de waarde van string en maakt nummer
  • modulus (% ) deelt door dat getal en geeft de rest terug (wat betekent dat de maximale waarde één minder is dan het getal dat je gebruikt)
  • ABS verandert negatieve resultaten in positieve
  • Voeg er vervolgens een toe aan het resultaat om 0 resultaten te elimineren (om een ​​dobbelsteenworp te simuleren)


  1. Wat is het verschil tussen Scope_Identity(), Identity(), @@Identity en Ident_Current()?

  2. Ondersteunt Postgres geneste of autonome transacties?

  3. wat is @JoinColumn en hoe wordt het gebruikt in Hibernate

  4. org.postgresql.util.PSQLException:Grote objecten mogen niet worden gebruikt in de modus voor automatisch vastleggen