SQL Server 2008 R2를 사용하고 있습니다.T-SQL SELECT TOP 중복을 반환합니다.
이상한 SQL 버크가 발견되었거나 내 코드에서 뭔가 이상한 행동을 일으키는 지 확실하지 않습니다. 특히 Google에서 아무 것도 나타나지 않았기 때문에 더욱 그렇습니다. vwResponsible_Office_Address라는보기가 있습니다. 이 6 개 중복을 포함하기 때문에,
SELECT TOP 1000 * FROM vwResponsible_Office_Address
..returns 409 행 :
SELECT * FROM vwResponsible_Office_Address
403 행
이 코드를
..returns.그러나 본 :
SELECT TOP 1000 * FROM vwResponsible_Office_Address
ORDER BY ID
다시 403 행 ..returns.
뷰와 관련된 코드를 게시 할 수 있지만 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
로 변경하려고 할 수 있습니까? – a1ex07
'vwEntity_Address' 뷰에 대한 코드도 포함시켜주십시오. – James
보기를 건너 뛰고 해당 TSQL을 직접 실행하면 동일한 이형성을 갖게됩니까? 카운트 (*)는 어떨까요? – Paparazzi