2012-05-30 3 views
0
DECLARE @startRowIndex int 
    set @startRowIndex=0 
    Declare @maximumRows int 
    set @maximumRows=5 

SET ROWCOUNT 5; 

WITH OrderedEmployees As 

SELECT *, ROW_NUMBER() OVER (Order By EmployeeID ASC) as RowNum FROM Employees 

SELECT * FROM OrderedEmployees Where RowNum > @startRowIndex 
Order By EmployeeID ASC 

웹 사이트에서이 쿼리를 받았지만 SQL Server Management Studio에서 실행할 때 다음 오류가 발생합니다. 직감이 잘못되었습니다. 그 날 여기 유세있다, 나는 이것이이라고 생각 밖으로SQL 쿼리의 구문 오류가 잘못되었습니다.

메시지 156, 수준 15, 상태 1, 줄

답변

3

을 'SELECT'키워드 근처의 10
의 구문이 잘못을 저를 도와주세요 무엇 원하는 :

DECLARE @startRowIndex int 
    set @startRowIndex=0 
    Declare @maximumRows int 
    set @maximumRows=5 

SET ROWCOUNT 5 

;WITH OrderedEmployees As 
(
    SELECT *, ROW_NUMBER() OVER (Order By EmployeeID ASC) as RowNum 
    FROM Employees 
) 
SELECT * 
FROM OrderedEmployees 
Where RowNum > @startRowIndex 
Order By EmployeeID ASC 

CTE를 필터링하는 대신 ROWCOUNT을 사용하는 이유가 확실하지 않습니다. 다음과 같이 사용합니다 :

DECLARE @startRowIndex int 
    set @startRowIndex=0 
    Declare @maximumRows int 
    set @maximumRows=5 

;WITH OrderedEmployees As 
(
    SELECT *, ROW_NUMBER() OVER (Order By EmployeeID ASC) as RowNum 
    FROM Employees 
) 
SELECT * 
FROM OrderedEmployees 
Where RowNum > @startRowIndex AND RowNum <= @maximumRows 
Order By EmployeeID ASC 
+0

고맙습니다. 그리고 나는 당신의 대답을 정확한 답으로 표시했습니다 !!! – user8189