2012-12-11 3 views
3

는 다음과 같은 SQL을 감안할 때 :SQL Server CTE에서 매개 변수 값을 설정하는 방법은 무엇입니까?

;WITH Results AS 
    (
     SELECT ItemListID, Title, 
     ROW_NUMBER() OVER(ORDER BY ItemListID DESC) as intRow, 
     COUNT(ItemListID) OVER() AS ActualNumberOfResults 
     FROM ItemData 
     WHERE FREETEXT(Title, @FTSSearchTerm) 
     AND WebsiteID = @WebsiteID 
     AND ContentTypeID = @ContentTypeID 
     AND GeoID2 = @GeoID         
    ) 
SELECT * FROM Results 
WHERE intRow BETWEEN @intStartRow AND @intEndRow 
ORDER BY ItemListID DESC  

SELECT @NumberOfResultsReturned = @@ROWCOUNT 

내가 매개 변수를 설정하려는, TOP의 값 @ActualNumberOfResults (1) CTE에서 반환 ActualNumberOfResults.

내가 사용하여 CTE 후, 다음,하지만 반복적 인 것 같다
SELECT @ActualNumberOfResults = COUNT(*) 
FROM ItemData 
WHERE CONTAINS(Title, @FTSSearchTerm ) 
AND [email protected] 

가 어떻게 이러한 목표를 달성 할 수 있습니까? 에

답변

3
;WITH cte AS 
(
    SELECT ItemListID, Title, 
     CASE WHEN ROW_NUMBER() OVER(ORDER BY ItemListID DESC) 
        BETWEEN @intStartRow AND @intEndRow THEN 1 
        END AS NumberOfResultsReturned,  
     COUNT(ItemListID) OVER() AS ActualNumberOfResults   
    FROM ItemData 
    WHERE FREETEXT(Title, @FTSSearchTerm) 
     AND WebsiteID = @WebsiteID 
     AND ContentTypeID = @ContentTypeID 
     AND GeoID2 = @GeoID         
) 
SELECT @NumberOfResultsReturned = COUNT(NumberOfResultsReturned), 
     @ActualNumberOfResults = MAX(ActualNumberOfResults) 
FROM cte   

데모 SQLFiddle

0

방문 확인은 MSDN에서이 링크> 여기 http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/c774bb71-84c9-44ce-bfce-a256ecbf56ab

;WITH CTE1 
AS (...) 
SELECT * FROM CTE1 

;WITH CTE2 
AS (...) 
SELECT * FROM CTE2 

코드

;WITH Results AS 
    (
     SELECT ItemListID, Title, 
     ROW_NUMBER() OVER(ORDER BY ItemListID DESC) as intRow, 
     COUNT(ItemListID) OVER() AS ActualNumberOfResults 
     FROM ItemData 
     WHERE FREETEXT(Title, @FTSSearchTerm) 
     AND WebsiteID = @WebsiteID 
     AND ContentTypeID = @ContentTypeID 
     AND GeoID2 = @GeoID         
    ) 
SELECT * FROM Results 
WHERE intRow BETWEEN @intStartRow AND @intEndRow 
ORDER BY ItemListID DESC 

SELECT @NumberOfResultsReturned = @@ROWCOUNT 

;WITH Results1 AS 
    (
     SELECT ItemListID, Title, 
     ROW_NUMBER() OVER(ORDER BY ItemListID DESC) as intRow, 
     COUNT(ItemListID) OVER() AS ActualNumberOfResults 
     FROM ItemData 
     WHERE FREETEXT(Title, @FTSSearchTerm) 
     AND WebsiteID = @WebsiteID 
     AND ContentTypeID = @ContentTypeID 
     AND GeoID2 = @GeoID         
    ) 

SELECT @ActualNumberOfResults = COUNT(*) 
FROM Results1 
관련 문제