2012-08-24 2 views
0

Je suis nouveau à cette activité de procédure stockée et je crois que c'est simple, tout simplement pas familier avec la syntaxe ou comment revenir. Je passe un ID de paramètre et je voudrais retourner des informations sur cet ID, mais cela pourrait provenir de l'une des deux tables. En fonction de la table dépend de quelles colonnes je retourne.Choisissez parmi deux tables avec paramètre dans la procédure stockée

ALTER PROCEDURE name 
@ID varchar (40) 
AS 

BEGIN 
    SET NOCOUNT ON; 
    DECLARE @result int 

IF exists (SELECT id, name, state 
    FROM tab1 
    WHERE tab1.id = @ID 
) 
    begin 
    /* return somehow, maybe as a temp table from previous check */ 
end 
else (SELECT id, name, country, state  
    FROM tab2 
    WHERE tab2.id = @ID 
) 
begin 
    /* return information from tab2 instead */ 
end 
end 
go 

vérifie si elles existent dans un tableau la meilleure façon, ou devrait-ce vraiment une jointure? Mes compétences sql sont nouvelles et je ne suis pas sûr de ce qui est disponible dans les procédures stockées.

Comment est-ce que je renvoie l'information? Mon Java y accédant attend cela comme le deuxième jeu de résultats dans cette procédure. (Non, je n'ai pas compris le premier jeu de résultats) Le premier jeu de résultats sera sensiblement le même, vérifier entre deux tables stockées dans des bases de données différentes mais impliquera un peu plus, je voulais juste que celui-ci fonctionne en premier.

Merci d'avance pour votre aide.

+0

Que feriez-vous si le même ID apparaissait dans les deux tables? –

+0

L'ID doit être unique sur les deux tables. L'un serait pour les nationaux et les autres internationaux. Je l'ai eu pour bien fonctionner en répétant la déclaration de sélection, mais ne serait-ce pas "doubler" le temps, et ne pourrait-il pas être plus rapide avec le stocker comme un temp? Donc 'INTO # tmpNA' et ensuite récupérer avec' SELECT * FROM #tmp NA' – bbotz

+0

Non, il n'y a pas besoin d'une table temporaire. Elle ajoutera une étape supplémentaire et ralentira la requête – ClearLogic

Répondre

0

Si vous renvoyez les mêmes colonnes des deux tables, vous pouvez faire comme ceci. Les données de table2 ne seront sélectionnées que si elles n'existent pas dans la table1.

ALTER PROCEDURE name 
@ID varchar (40) 
AS 

BEGIN 
    SET NOCOUNT ON; 
    DECLARE @result int 

SELECT id, name, state , country FROM tab1 WHERE tab1.id = @ID 
UNION ALL 
SELECT id, name,state , country FROM tab2 WHERE tab2.id = @ID 
    AND NOT EXISTS(SELECT 1 FROM tab1 WHERE [email protected]) 
+0

_Selon la table dépend de quelles colonnes je retourne._ Ils ne seront pas les mêmes colonnes merci cependant. – bbotz

Questions connexes