2009-07-07 10 views
2

J'ai une requête de sélection. Je veux remplacer cette requête select par une autre select si cela ne renvoie aucune ligne.Sélection SQL - Retour en tant qu'un

Par exemple permet de dire que j'ai:

Select * from Temp2 
if (@@rowcount=0) 
select * from Temp1 

A la fin C#, je récupérer comme un ensemble de données. Donc, si aucune ligne n'est retournée, elle ferait une autre sélection. Mais cette sélection serait dans les tableaux [1] et non dans les tableaux [0]. Donc, essentiellement, ce que je veux faire est de remplacer les premiers résultats de sélection dans le proc stocké sql avec celui de la dernière if @@ rowcount = 0. Je suis sûr que cela peut être fait. Je veux une solution bien rangée.

je peux faire quelque chose comme ceci:

if ((select count(ID) from Temp2) =0) 
    select * from Temp1 
else 
    select * from Temp2 

mais je 3 sélectionne. Je voudrais le faire avec max 2 sélections parce que mon instruction select est plus complexe que l'exemple trivial donné et je n'aime pas répéter la même sélection deux fois (par exemple, sélectionnez sur Temp2).

Merci

Répondre

9
select * from Temp2 
UNION ALL 
select * from Temp1 
where not exists (select * from Temp2) 
+1

+ 1 .. hourras union tout a fait ... puisque temp2 n'aura pas de valeurs Temp1, il n'y a pas de point de la dernière où ... Merci beaucoup :) – waqasahmed

+0

ok, mais si vous supprimez la où, il retournera toujours les lignes de la forme Temp1, même s'il y a des lignes dans Temp2; ce qui est différent de la logique que vous aviez dans votre question initiale. –

+0

Je sais .. mes instructions select ont la clause where pour filtrer les résultats .. et il ne retournera jamais un résultat où une ligne dans un select existe aussi comme une ligne dans un autre select. – waqasahmed

2

Peut-être une variable de table?

declare @result table({column defs}) 

insert @result 
select (..query 1...) 

if(@@rowcount = 0) 
    insert @result 
    select (..query 2...) 

select * from @result 
+0

+1 merci. mais c'est une solution plus complexe .. Mais je pourrais avoir besoin d'utiliser à l'avenir des procédures stockées plus complexes, alors merci encore. – waqasahmed

Questions connexes