【发布时间】:2012-07-30 08:49:44
【问题描述】:
我正在构建一段代码,以便人们可以控制公寓大楼的房间分配。他们想要的是能够为特定大学学期的所有租户随机分配房间号。我遇到的问题是,在插入完成后,我选择随机房间号的子查询对于所有租户都是相同的。
我有一张桌子,上面有房间和房间里的可用位置。当我在插入语句之外作为一个整体运行选择语句时,它工作得很好,每次为每个租户返回随机房间号,但插入语句没有。任何想法为什么?
这是插入语句的代码。
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
【问题讨论】:
-
那是哪个版本的 Sql Server?
-
这个问题只针对您,所以我不太可能从其他用户那里获得任何积分。如果解决方案适合您,请接受问题或告诉我您为什么不这样做
标签: sql-server-2008 tsql select random insert