Tsql 如何从SQL Server CTE设置参数值?

Tsql 如何从SQL Server CTE设置参数值?,tsql,sql-server-2008-r2,common-table-expression,Tsql,Sql Server 2008 R2,Common Table Expression,给定以下SQL: ;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, @FTSSea

给定以下SQL:

;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
我想将参数@ActualNumberOfResults设置为从CTE返回的TOP(1)ActualNumberOfResults的值

在CTE之后,我使用了以下内容,但似乎是重复的:

SELECT @ActualNumberOfResults = COUNT(*)
FROM ItemData
WHERE CONTAINS(Title, @FTSSearchTerm  )
AND WebsiteID=@WebsiteID 

我如何才能做到这一点?

访问查看MSDN上的此链接>

这是你的密码

;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
演示

;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
;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