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