2010-05-13 3 views
1

에 확인, SQL 서버 2000에 실패 쿼리입니다 :이 시나리오에서는중첩 된 SQL 선택 문은 SQL 서버 여기에 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 

, 사용자가 선호하는 순서를 지정하는 정수 필드로, 여러 주소 정의를 가지고있다. "Address2"(두 번째 기본 주소)는 상위 두 개의 기본 주소를 가져오고 내림차순으로 정렬 한 다음 결과에서 첫 번째 주소를 가져옵니다. Order 필드에 "2"가있는 레코드에 대해 SELECT를 수행하는 하위 쿼리를 사용하지만 Order 값은 인접하지 않을 수도 있습니다.

어떻게 SQL 2000의 제한 사항을 준수하도록 다시 작성할 수 있습니까?

매우 감사드립니다.

내가 실제 사용자 ID와 WHERE 절에 u.UserID를 교체 할 때, SQL 서버 2000은 불평하지 않습니다

[편집]. SQL 2000에서는 내부 참조 (u.UserID)를 외부 테이블 (User u)에 연결할 수 없다고합니다. 다시

는 슬로우 오류 : 문제 광고 INNER JOIN UserAddressOrder uo ON ua.UserID = uo.UserID에 내부 기준 uo.UserID를 해결할 수없는 때문 때문에

Msg 8624, Level 16, State 16, Line 24 
Internal SQL Server error. 
+1

SQL 2000에서 어떤 오류가 있습니까? – SqlACID

+0

오류 : 메시지 8624, 수준 16, 상태 16, 수준 16 내부 SQL Server 오류입니다. – Jay

답변

0

는, I는 허용 함수를 호출 라인을 대체 값은 uo.UserID입니다.

이 문제는 우아하게 해결되지는 않지만 약간의 성능 저하가 있었지만 작업이 완료되었습니다.