I have a very strange bug with sql server 2008:
To display a pager in a CRUD application details view, I make a sql request to get previous and next record relative to the current, it works well except when ordering on a DECIMAL column, I can reduce the problem to that query (FTE is decimal(18,2)):
WITH [IndexedRows] AS (
SELECT
[ContactId],
[ContactCode],
[FTE],
[EmployeeName],
ROW_NUMBER() OVER ( ORDER BY [FTE] ASC ) AS [RowIndex]
FROM
[Vw_HrEmployee]
)
/* 1. I can see ContactId 1109 is rowindex 7 */
/*SELECT * FROM [IndexedRows];*/
/* 2. Get the RowIndex, it returns 7 */
/*SELECT [RowIndex]
FROM [IndexedRows]
WHERE [ContactId] = 1109;*/
/* 3. Why it doesn't returns ContactId 1109 ??? */
SELECT [ContactId],
[EmployeeName]
FROM [IndexedRows]
WHERE [RowIndex] = 7;
I get the contactId of another person who have the same FTE value, but I don't understand why the WHERE rowindex don't return the correct row (if I display IndexedRows, it looks good!).
I don't think it's revelant but Vw_HrEmployee is a View.
Any help/idea/workaround to solve that is welcome,
Thanks in advance