2013-08-06 4 views
2

je la requête suivante:Comment stocker le résultat d'une requête sql dans une variable?

with cte as 
(SELECT top 10 [1],[2] 
FROM [tbl_B] where [2] > '2000-01-01' and Status_7 = 0 and   Status_8 = 1 
ORDER BY [2]) 
, 
CTE1 AS 
(select [1], row_number() over (order by [2]) as rn 
from CTE 
) 
select [1] from CTE1 where rn = '10' 

comment puis-je mettre cela en une variable pour le comparer à un autre résultat de la requête? Si j'utilise set @ 123 = (ci-dessus requête) il donne des erreurs.

Répondre

2
with cte as 
(
    SELECT top 10 [1],[2] 
    FROM [tbl_B] 
    where [2] > '2000-01-01' and Status_7 = 0 and Status_8 = 1 
    ORDER BY [2] 
) 
,CTE1 AS 
( 
    select [1], row_number() over (order by [2]) as rn 
    from CTE 
) 
select @123 = [1] from CTE1 where rn = '10' 
+0

Comme une petite note, alors que le 'SET @ 123 =' va « exploser » s'il y a plus d'une ligne, le 'SELECT @ 123 =' s'exécutera sans problème et mettra la valeur de la dernière ligne. – xanatos

0
with cte as 
(SELECT top 10 [1],[2] 
FROM [tbl_B] where [2] > '2000-01-01' and Status_7 = 0 and   Status_8 = 1 
ORDER BY [2]) 
, 
CTE1 AS 
(select [1], row_number() over (order by [2]) as rn 
from CTE 
) 
select @123 = [1] from CTE1 where rn = '10' 
0

Vous pouvez utiliser une variable de table pour stocker le jeu de résultats du CTE. Par exemple:

declare @table_var table (id int, col1 varchar(50)); 

; with CTE as 
     (
     ... your definition here ... 
     ) 
insert @table_var 
     (id, col1) 
select id 
,  col1 
from CTE 

En comparant cela avec une autre série peut être fait avec une jointure externe complète:

select coalesce(t1.id, t2.id) as id 
,  coalesce(t1.col1, t2.col1) as col1 
,  case 
     when t1.id is null then 'Missing in t1' 
     when t2.id is null then 'Missing in t2' 
     when isnull(t1.col1,'') <> isnull(t2.col1,'') then 'Col1 is different' 
     else 'Identical' 
     end as Difference 
from @table_var1 t1 
full outer join 
     @table_var2 t2 
on  t1.id = t2.id 
Questions connexes