2009-09-16 7 views
0

J'essayais de déterminer une meilleure façon que tant d'instructions IF/THEN pour déterminer si une ou plusieurs tables contiennent une référence à une clé forign. J'ai simplement besoin de savoir (vrai/faux) si une ligne existe dans l'une des 20 tables. Toutes les tables ont le même champ fk. J'espère que cela a du sens, sinon je vais essayer d'expliquer plus loin.Déterminer si une ligne pour un fk existe dans l'une des 20 tables

+0

SYS.FOREIGN_KEYS et SYS.TABLES ... –

Répondre

1

Je ne suis pas sûr de comprendre la question. Est-ce que ce qui suit améliorerait votre situation?

if exists(select * from Table1 where ForeignKeyColumn = searchValue) 
    or exists(select * from Table2 where ForeignKeyColumn = searchValue) 
    or exists(select * from Table3 where ForeignKeyColumn = searchValue) 
    or ... 
+0

oui c'est un peu plus compact - merci. – schmoopy

0

En supposant que les 20 tables restent cohérentes, qu'en est-il de l'utilisation d'une jointure externe gauche pour chacune des tables. façon probablement inefficace de le faire, mais devrait fonctionner

select Id from 
    (Select PK.id, isnull(tbl1.fk,0) as fk1, isnull(tbl2.fk,0) as fk2 ... etc 
    from pk left join tbl1 on pk.id = tbl1.fk left join 
     tbl2 on pk.id = tbl2.fk ... etc) as VirtualTable 
Where fk1>0 or fk2>0 ... etc 
0

Donc, vous essayez de travailler si vous pouvez supprimer une ligne en particulier?

Alors ... peut-être essayer:

begin tran; 
delete tablename 
where id = 3; 
rollback tran; 

voir alors quelle erreur vous obtenez (le cas échéant), et le nombre de lignes sont affectées.

0

Qu'en est-il quelque chose comme:

if exists (
select * from Table1 where MyKey = @key 
union 
select * from Table2 where MyKey = @key 
union 
select * from Table3 where MyKey = @key 
... 
) 

Je n'ai pas une instance de serveur SQL ouvert devant moi, donc je suis sûr que a une erreur de syntaxe quelque part, mais vous obtenez l'idée =)

+0

peut vouloir union tout pour améliorer la vitesse, puisque vous êtes seulement en train de fouiller forexistance ne pas retourner l'information – HLGEM

Questions connexes