Я использую SQL Server 2008 R2.
Я не уверен, обнаружил ли я странную причуду SQL, или (что более вероятно) что-то в моем коде вызывает это странное поведение, особенно когдаГугл ничего не обнаружил.У меня есть представление с именем vwResponsible_Office_Address.
SELECT * FROM vwResponsible_Office_Address
.. возвращает 403 строки
Этот код:
SELECT TOP 1000 * FROM vwResponsible_Office_Address
.. возвращает 409 строк, так как включает 6 дубликатов.
Однако это:
SELECT TOP 1000 * FROM vwResponsible_Office_Address
ORDER BY ID
.. возвращает 403 строки снова.
Я могу опубликовать код для представления, если оно уместно, но имеет ли это смысл дляВЫБЕРИТЕ ТОП, чтобы когда-либо работать таким образом?Я понимаю, что SELECT TOP может возвращать записи в любом порядке, но не понимаю, почему количество возвращаемых записей должно меняться.
Представление использует перекрестное применение, что может как-то повлиять на набор результатов?
РЕДАКТИРОВАТЬ: просмотр определения по запросу
CREATE VIEW [dbo].[vwResponsible_Office_Address]
AS
SELECT fp.Entity_ID [Reg_Office_Entity_ID],
fp.Entity_Name [Reg_Office_Entity_Name],
addr.Address_ID
FROM [dbo].[Entity_Relationship] er
INNER JOIN [dbo].[Entity] fp
ON er.[Related_Entity_ID] = fp.[Entity_ID]
INNER JOIN [dbo].[Entity_Address] ea
ON ea.[Entity_ID] = fp.[Entity_ID]
CROSS APPLY (
SELECT TOP 1 Address_ID
FROM [dbo].[vwEntity_Address] vea
WHERE [vea].[Entity_ID] = fp.Entity_ID
ORDER by ea.[Address_Type_ID] ASC, ea.[Address_ID] DESC
) addr
WHERE [Entity_Relationship_Type_ID] = 25 -- fee payment relationship
UNION
SELECT ets.[Entity_ID],
ets.[Entity_Name],
addr.[Address_ID]
FROM dbo.[vwEntity_Entitlement_Status] ets
INNER JOIN dbo.[Entity_Address] ea
ON ea.[Entity_ID] = ets.[Entity_ID]
CROSS APPLY (
SELECT TOP 1 [Address_ID]
FROM [dbo].[vwEntity_Address] vea
WHERE vea.[Entity_ID] = ets.[Entity_ID]
ORDER by ea.[Address_Type_ID] ASC, ea.[Address_ID] DESC
) addr
WHERE ets.[Entitlement_Type_ID] = 40 -- registered office
AND ets.[Entitlement_Status_ID] = 11 -- active