Tsql 如何从SQL Server CTE设置参数值?
给定以下SQL: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
;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