我有一个Profile
包含列的表:UserID
, Firstname
,Lastname
我正在尝试创建一个传递@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
我传入用户 ID '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 集。