我正在使用SQL Server 2008 R2。T-SQL SELECT TOP返回重複項
我不確定我是否發現了一個奇怪的SQL怪癖,或者(更可能)是我的代碼中的某些內容導致了這種奇怪的行爲,特別是因爲Google什麼也沒有發現。我有一個名爲vwResponsible_Office_Address的視圖。
SELECT * FROM vwResponsible_Office_Address
..returns 403行
此代碼:
SELECT TOP 1000 * FROM vwResponsible_Office_Address
..returns 409行,因爲它包括6個重複。
然而這樣的:
SELECT TOP 1000 * FROM vwResponsible_Office_Address
ORDER BY ID
再次..returns 403行。
我可以發佈視圖的代碼,如果它是相關的,但它是否有意義的SELECT TOP以這種方式工作?我知道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
您可以發佈您'VIEW'定義是什麼? – a1ex07
請同時包含'vwEntity_Address'視圖的代碼。 – James
如果繞過視圖並運行TSQL direct,您是否會遇到同樣的問題?計數(*)如何? – Paparazzi