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)