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

То, что вы видите, это потому, что ROW_NUMBER() работает на местном SELECTтолько, а не на весь стол!

Попробуйте это:

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 только знает, что есть целая куча данных, принадлежащих таблице. Заявление ORDER BY joiningdate ASC внутри предложения OVER - чрезвычайно важно! Изменение этого столбца или добавление большего количества столбцов потенциально изменят номера строк.

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 
Смежные вопросы