人が集合住宅の部屋の割り当てを制御できるように、コードを作成しています。彼らが望んでいるのは、特定の学期のすべてのテナントにランダムに部屋番号を割り当てられるようにすることです。私が直面している問題は、挿入が完了した後、ランダムな部屋番号を選択するサブクエリがすべてのテナントで同じであることです。
部屋と部屋の利用可能なスポットを含むテーブルがあります。selectステートメントをinsertステートメントの外で全体として実行すると、正常に機能し、テナントごとに毎回ランダムな部屋番号が返されますが、insertステートメントはそうではありません。理由はありますか?
これが挿入ステートメントのコードです。
INSERT INTO Rooms_Semester (UserId, SemesterId, RoomId, LastUpdatedBy)
SELECT u.Id, @SemesterId,
(SELECT TOP 1 r.Id
FROM Rooms r
WHERE (SELECT COUNT(rs.RoomId)
FROM Rooms_Semester rs
WHERE rs.RoomId = r.Id) <= r.NumberOfRooms
AND r.RoomNumber IS NOT NULL
ORDER BY NEWID())
, 1
FROM [User] u
JOIN [Order] o
ON o.User_Id = u.Id
JOIN OrderItem oi
ON oi.Order_Id = o.Id
AND oi.Product_Id = @SemesterId
LEFT JOIN Rooms_Semester rs
ON rs.UserId = u.Id
WHERE oi.Product_Id = @SemesterId
AND LOWER(oi.Status) = 'tenant'
AND rs.RoomId IS NULL