わかりました、これが私がその間に思いついた別の解決策です。ユーザーは既にランダムな順序でシステム内にいると判断したので、デコーダリング スタイルのアプローチを試す必要があるかもしれません。したがって、このコードはシフト値を生成し、ユーザー ID をシフトします。select ステートメントは、数式で「ラップアラウンド」を行います。それは完全にランダムではなく、洗練されたものを使用することもできますが、これは私が持っているものです. ユーザーはおそらくランダム性の欠如に気付かないでしょう。助けてくれてありがとう!
DECLARE @people TABLE
(
id INT,
name VARCHAR(50)
)
INSERT INTO @people VALUES (1,'Matthew')
INSERT INTO @people VALUES (2,'Mark')
INSERT INTO @people VALUES (3,'Luke')
INSERT INTO @people VALUES (4,'John')
INSERT INTO @people VALUES (5,'Doug')
INSERT INTO @people VALUES (6,'Jamie')
INSERT INTO @people VALUES (7,'John')
INSERT INTO @people VALUES (8,'Cameron')
INSERT INTO @people VALUES (9,'Emily')
INSERT INTO @people VALUES (10,'Tyler')
INSERT INTO @people VALUES (11,'Todd')
INSERT INTO @people VALUES (12,'Kathryn')
DECLARE @Random INT;
DECLARE @Upper INT;
DECLARE @Lower INT;
DECLARE @MaxId INT;
SET @Lower = 1 -- The lowest record ID
SELECT @Upper = (MAX(Id) / 2) FROM @people -- select random int that is somewhere between 1 and half of max ID for shift
SELECT @MaxId = MAX(Id) FROM @people -- select the largest ID in the table
SELECT @Random = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0) -- calculate a random number to shift IDs off by
SELECT id, ((id + @Random) % @MaxId) + 1, @Random
from @people