2013-04-24 4 views
2

테이블에 약 5000 개의 행이 있습니다. 테이블의 특정 행 위치를 알고 싶습니다. 내 저장 프로 시저는 다음과 같습니다행 번호 반입

CREATE PROC Sp_getrownumber(@MemberID INT) 
AS 
    SELECT Row_number() 
      OVER ( ORDER BY joiningdate ASC) AS Rownumber, 
      M.memberid, 
      P.name, 
      M.joiningdate 
    FROM tblmemberdata M 
      JOIN tblpersonaldetails P 
      ON M.memberid = P.memberid 

하지만 2 노력하고 때 특정 행을 인출, 아니 1 코드를 보여주는 행은 다음과 같습니다

CREATE PROC Sp_getrownumber(@MemberID INT) 
AS 
    SELECT Row_number() 
      OVER ( ORDER BY joiningdate ASC) AS Rownumber, 
      M.memberid, 
      P.name, 
      M.joiningdate 
    FROM tblmemberdata M 
      JOIN tblpersonaldetails P 
      ON M.memberid = P.memberid 
    WHERE M.memberid = @MemberID 

어떻게 정확한 행 번호를 가져 오기 위해 ?

답변

2

에 수정

alter proc SP_GetRowNumber 
(@MemberID int) 
as 
SELECT * FROM (
    SELECT 
ROW_NUMBER() OVER (ORDER BY JoiningDate ASC) AS Rownumber, 
M.MemberID,P.Name,M.JoiningDate 
FROM tblMemberData M join tblPersonalDetails P on M.MemberID=P.MemberID 
) AS Counts 
WHERE MemberID = @MemberID 
2

은 당신이보고있는 것은 로컬 SELECTROW_NUMBER() 작품, 그리고 전체 테이블에 있기 때문에!

이 하나보십시오

CREATE PROC Sp_getrownumber(@MemberID INT) 
AS 
    SELECT * 
    FROM (
     SELECT Row_number() 
       OVER (ORDER BY joiningdate ASC) AS Rownumber, 
       M.memberid, 
       P.name, 
       M.joiningdate 
     FROM tblmemberdata M 
     JOIN tblpersonaldetails P 
       ON M.memberid = P.memberid 
    ) tblRowCounter 
    WHERE M.memberid = @MemberID; 

이것이 코드 원래 행 번호를 보존 메모리 테이블에 필터링을 수행하는 수행.

그러나!은 SQL에이라는 행 번호가 없음을 알고 있어야합니다. SQL 은 테이블에 속한 모든 데이터가 있다는 것을은 알고 있습니다. OVER 절의 내부에있는 ORDER BY joiningdate ASC 문은 매우 중요한 인 입니다! 해당 열을 변경하거나 열을 더 추가하면 잠재적으로 행 번호가 변경됩니다.

1
CREATE PROC Sp_getrownumber(@MemberID INT) 
AS 
    ;WITH Numbered AS (
     SELECT Row_number() 
       OVER ( ORDER BY joiningdate ASC) AS Rownumber, 
      M.memberid, 
      P.name, 
      M.joiningdate 
     FROM tblmemberdata M 
      JOIN tblpersonaldetails P 
      ON M.memberid = P.memberid 
    ) 
    SELECT * 
    FROM Numbered 
    WHERE memberid = @MemberID