2013-01-09 45 views
2

說我有具有返回PARAM一個存儲過程稱爲Count,它是由以下的SQL:可能從CTE返回記錄和計數?

with temp as 
(
    SELECT ROW_NUMBER() OVER(ORDER BY o.createDate) as rowNum, 
      o.orderId 
    FROM Orders as o 

) 
SELECT * FROM temp where rowNum BETWEEEN 10 and 20 
SELECT @Count = COUNT(*) FROM Temp 

目前這將打破,因爲Temp之後的第一選擇了。我可以將返回參數的值設置爲我的CTE 中返回10-20行的總行數嗎?

我想我可能不得不使用臨時表來做到這一點,但我很好奇它是否可以使用CTE來完成。

+0

的可能重複[查詢計數的總行(http://stackoverflow.com/questions/10997171/ count-total-rows-in-query) –

+0

實際上可能不是那樣會返回一個額外的列而不是輸出參數。 –

+0

是的,沒有骰子。臨時表可能是我最好的選擇? –

回答

1

不幸的是,你不能做你想做的事情。戈登的答案是可以接受的,只是它沒有給你的變量返回一個值。

您正遇到一個基本問題。 CTE只允許在它之後進行一個查詢。

臨時表或表變量將是唯一的出路。除非你將表後再次走熱膨脹係數之外返回變量,就像這樣:

with temp as 
(
    SELECT ROW_NUMBER() OVER(ORDER BY o.createDate) as rowNum, 
      o.orderId 
    FROM Orders as o 
) 
SELECT * FROM temp where rowNum BETWEEEN 10 and 20 
SELECT @Count = COUNT(*) FROM Orders 
4

你可以直接把值放入溫度:

with temp as 
(
    SELECT ROW_NUMBER() OVER(ORDER BY o.createDate) as rowNum, 
      count(*) over() as cnt, 
      o.orderId 
    FROM Orders as o 

) 
SELECT * FROM temp where rowNum BETWEEEN 10 and 20 

然後,您可以讀取每一行的CNT。