2013-10-25 44 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

我想我已经在上面的问题中提出过这种方式,请参阅。谢谢 –