2010-04-05 17 views
2

J'ai besoin d'obtenir des valeurs factices si elles ne retournent pas de lignes de table. Le If existe en soi, mais donne une erreur avec une Union. Quelqu'un peut-il me guider s'il vous plaît avec une solution ou une solution de contournement?Union et si existant - ne fonctionne pas ensemble - S'il vous plaît aider

create table test1 (col1 varchar(10))  
create table test2 (col1 varchar(10))  
create table test3 (col1 varchar(10)) 


insert test1 values ('test1-row1')  
insert test1 values ('test1-row2')  
insert test2 values ('test2-row1')  
insert test2 values ('test2-row2') 

select col1 from test1  
union  
select col1 from test2  
union  
if exists (select * from test3)  
    select col1 from test3  
else  
    select 'dummy' 

Répondre

9

Vous pouvez ajouter un autre syndicat qui retourne la ligne fictive si test3 est vide:

select col1 from test1  
union  
select col1 from test2  
union  
select col1 from test3  
union 
select 'dummy' where not exists (select * from test3) 
+0

Cela fonctionne très bien. Je vous remercie. – user267277

0

Je crois que vous ne pouvez pas utiliser si comme ça. L'instruction IF doit contrôler le flux de contrôle, maintenant la sélection de données. Changer la requête à

IF exists (select * from test3) 
BEGIN 
--query all three 
END 
ELSE 
BEGIN 
--query just two 
END