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