2013-10-25 42 views
0

我正在與with clause爭鬥兩個返回結果集以及設置一個sql變量。 或者不知何故,我只是想從with clause得到兩個結果。 我的SQL查詢:SQL與子句多個結果

declare @total as int 

;with T as 
(
    // some sql query 
) 
select * from T 

上面的查詢返回的結果集的,但我也想設置(T中的行數)@total
這可能嗎?謝謝

這裏也是一個路兩做到這一點,如:

;with T as 
    (
     select count(1), * from table1 
    ) 
    select * from T 

但它不是一個適當的方式做到這一點,因爲它會返回countcolumn

+0

爲什麼您需要CTE內部的總計數,因爲它可以在外部選擇中使用:'select * from T'。 – TechDo

+0

@techdo:從外部選擇我只能得到一個結果集或計數的事情,但我想都。 –

回答

1

它如何你從你的問題致電這是不明確。是通過存儲過程,ADO.NET還是其他所有東西?

我不確定您希望如何在CTE中獲得您的變量集。我不知道有什麼辦法做到這一點。

也許使用您的CTE來填充表變量和結果,然後將表變量中的行數設置爲out參數(如果使用的是存儲過程)。

或者,您也可以在從CTE中選擇結果後使用@@ ROWCOUNT。以See this SO post爲例。

使用上面的示例測試@@ ROWCOUNT會得出結果並返回單獨的計數結果。見下文;

DECLARE @Total AS INT 

;WITH T AS 
(
SELECT 2 AS a 
UNION 
SELECT 4 
UNION 
SELECT 6 
UNION 
SELECT 8 
) SELECT * FROM T 

SET @Total = (SELECT @@ROWCOUNT) 

SELECT @Total 
+0

正是我所需要的!謝謝@穆爾先生。 –

+0

沒有probs。很高興我可以得到一些幫助。 –

+0

我把一個例子放在一起如何使用WITH子句來創建一個臨時靜態表,使用類似的方法: http://www.giombetti.com/2014/02/14/using-sql-with-clause-to -create-臨時靜態表,在查詢時/ –

1

請嘗試以下查詢:

select 
    count(*) over() [Count], 
    * 
From T 
+0

我想我已經在上面的問題中提出過這種方式,請參閱。謝謝 –