1
我有一个Profile
表列:UserID
,Firstname
,Lastname
如何生成从列随机数字,没有重复 - SQL服务器
我想创造出通过在@UserID
参数的存储过程,并从UserID
列中生成10个随机数。
这样做的目的是为了让一个用户将消息发送给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!我已经尝试过你的解决方案,它完美的工作。但我也会接受你的建议,并研究'tablesample()'函数。 再次感谢您的帮助! – TreasaNGC