1

这是查询:

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.
4

1 回答 1

0

由于问题是由于无法解决uo.UserIDline 中的内部引用INNER JOIN UserAddressOrder uo ON ua.UserID = uo.UserID,我用调用一个接受该uo.UserID值作为参数的函数替换了该行。

这并不能优雅地解决问题,但它完成了工作(尽管性能略有下降)。

于 2010-05-18T16:18:40.470 回答