У меня есть Profile
таблицы со столбцами: UserID
, Firstname
, Lastname
Как я могу генерировать случайные числа из столбца без дубликатов - SQL Server
Я пытаюсь создать хранимую процедуру, которая проходит в параметре @UserID
и генерирует 10 случайных чисел, взятых из столбца UserID
.
Целью этого является, чтобы позволить одному пользователю отправить сообщение 10 случайных пользователей (без дубликатов)
Ниже то, что я до сих пор:
CREATE PROCEDURE [dbo].[Random10]
@UserID INT
AS
DECLARE @MaxID INT, @MinID INT, @RandomID INT, @Index INT
SET @MinID = (SELECT MIN(P.UserID) FROM Profile P)
SET @MaxID = (SELECT MAX(P.UserID) FROM Profile P)
SET @Index = 0
CREATE TABLE #RandomUsers
(
ID INT PRIMARY KEY IDENTITY,
UserID INT
)
WHILE @Index < 10
BEGIN
SELECT @RandomID = ROUND(((@MaxID - @MinID - 1) * RAND() + @MinID), 0)
IF (@RandomID <> @UserID)
BEGIN
INSERT INTO #RandomUsers VALUES (@RandomID)
SET @Index = @Index + 1
END
ELSE
BEGIN
SET @Index = @Index
END
END
SELECT * FROM #RandomUsers
Я проходящее в UserID '66' и используя «WHILE LOOP» и «RAND()» для генерации 10 номеров. «IF» оператор используется для устранения параметра «@UserID» от появления в списке (потому что это было бы пользователю отправить сообщение)
Вот результат:
|ID|UserID|
| 1| 66|
| 2| 80|
| 3| 66|
| 4| 64|
| 5| 14|
| 6| 72|
| 7| 72|
| 8| 81|
| 9| 19|
|10| 56|
Как вы можете см. некоторые дубликаты.
Я попытался добавить предложение WHERE, чтобы устранить обе эти проблемы, но я получаю возвращаемый набор NULL.
Благодарим за скорый ответ Jonathon! Я пробовал ваше решение, и он отлично работает. Но я также возьму ваш совет и посмотрю на функцию tablesmple(). Еще раз спасибо, большая помощь! – TreasaNGC