Pomocny edytor dodał "Wybierz" przed każdą instrukcją, ale chodzi o to, że może generować unikalne klucze dla każdego wiersza w zwrocie, a nie tylko jednego elementu (do tego użyłbym funkcji Rand()).Na przykład :Wybierz 100 najlepszych Rand(),* z tabeli tblExample
Zwróci tę samą losową wartość dla wszystkich 100 wierszy.
Podczas:Wybierz 100 najlepszych ABS(CHECKSUM(NEWID()) % 10),* z przykładu tabeli
Zwróci inną losową wartość z zakresu od 0 do 9 w każdym wierszu w zwrocie. Tak więc, chociaż wybór ułatwia kopiowanie i wklejanie, możesz skopiować logikę do instrukcji select, jeśli jest to wymagane.
To generuje losową liczbę od 0 do 9
SELECT ABS(CHECKSUM(NEWID()) % 10)
1 do 6
SELECT ABS(CHECKSUM(NEWID()) % 6) + 1
3 do 6
SELECT ABS(CHECKSUM(NEWID()) % 4) + 3
Dynamiczny (na podstawie komentarza Eilert Hjelmeseths, zaktualizowany w celu naprawienia błędu (+ do -))
SELECT ABS(CHECKSUM(NEWID()) % (@max - @min - 1)) + @min
Zaktualizowano na podstawie komentarzy:
NEWID
generuje losowy ciąg (dla każdego zwracanego wiersza)CHECKSUM
pobiera wartość ciągu i tworzy liczbę- moduł (
%
) dzieli przez tę liczbę i zwraca resztę (co oznacza, że maksymalna wartość jest o jeden mniejsza od liczby, której używasz) ABS
zmienia negatywne wyniki na pozytywne- następnie dodaj jeden do wyniku, aby wyeliminować 0 wyników (aby zasymulować rzut kostką)