Вот запрос:
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» (второй предпочтительный адрес) пытается взять два верхних предпочтительных адреса, упорядочить их по убыванию, а затем взять верхний из результата. Вы можете сказать, просто используйте подзапрос, который выполняет SELECT для записи с «2» в поле «Порядок», но значения «Порядок» не являются непрерывными.
Как это можно переписать, чтобы соответствовать ограничениям SQL 2000?
Очень ценится.
[EDIT]
Когда я заменяю u.UserID
в предложении WHERE
на фактический идентификатор пользователя, SQL Server 2000 не жалуется. Кажется, что SQL 2000 не может обработать привязку внутренней ссылки (u.UserID) к внешней таблице (User u).
Снова выдается ошибка:
Msg 8624, Level 16, State 16, Line 24
Internal SQL Server error.