这是查询:
INSERT INTO @TempTable
SELECT
UserID, Name,
Address1 =
(SELECT TOP 1 [Address] FROM
(SELECT TOP 1 [Address] FROM [UserAddress] ua
INNER JOIN UserAddressOrder uo ON ua.UserID = uo.UserID
WHERE ua.UserID = u.UserID
ORDER BY uo.AddressOrder ASC) q
ORDER BY AddressOrder DESC),
Address2 =
(SELECT TOP 1 [Address] FROM
(SELECT TOP 2 [Address] FROM [UserAddress] ua
INNER JOIN UserAddressOrder uo ON ua.UserID = uo.UserID
WHERE ua.UserID = u.UserID
ORDER BY uo.AddressOrder ASC) q
ORDER BY AddressOrder DESC)
FROM
User u
在这种情况下,用户有多个地址定义,其中一个整数字段指定首选顺序。“Address2”(第二个首选地址)尝试获取前两个首选地址,按降序排列,然后从结果中获取前一个。您可能会说,只需使用一个子查询,它对 Order 字段中带有“2”的记录执行 SELECT,但 Order 值不连续。
如何重写它以符合 SQL 2000 的限制?
非常感谢。
[编辑]
当我用实际的用户 ID 替换u.UserID
子句WHERE
时,SQL Server 2000 不会抱怨。似乎 SQL 2000 无法处理将内部引用 (u.UserID) 链接到外部表 (User u)。
同样,抛出的错误是:
Msg 8624, Level 16, State 16, Line 24
Internal SQL Server error.