2010-07-22 6 views
0

Je donne les résultats suivants stockées ProcédureProcédure valable Stocké ne pas retourner aucun résultat

ALTER PROCEDURE [dbo].[bt_BizForSale_GetByID] 
(
@ID int 
) 
AS 
SET NOCOUNT ON 

SELECT  dbo.bt_BizForSale.UserID, 
      dbo.bt_BizForSale.VendorType, 
      dbo.bt_BizForSale.BusinessName, 
      dbo.bt_BizForSale.isEmailSubscriber, 
      dbo.bt_BizForSale.isIntermediarySubscriber, 
      dbo.bt_Regions.Region AS Country, 
      bt_Regions_1.Region AS Province, 
      bt_Regions_2.Region AS City, 
      dbo.bt_BizForSale.[AdType] 

FROM   dbo.bt_BizForSale INNER JOIN 
         dbo.bt_Regions ON dbo.bt_BizForSale.[61] = dbo.bt_Regions.ID INNER JOIN 
         dbo.bt_Regions AS bt_Regions_1 ON dbo.bt_BizForSale.[62] = bt_Regions_1.ID INNER JOIN 
         dbo.bt_Regions AS bt_Regions_2 ON dbo.bt_BizForSale.[63] = bt_Regions_2.ID 

WHERE  (dbo.bt_BizForSale.ID = @ID) 

Et quand je l'exécute avec un ID VALIDE de la table, il ne revient pas aucun résultat. Que pourrais-je manquer? PS: sur "la plupart" des ID valides que je passe à la procédure stockée, j'obtiens les résultats que je recherche. Exemple: 10010 renvoie les résultats, mais pas 10104. Les deux sont des enregistrements valides dans la base de données.

+0

Avez-vous essayé d'exécuter votre juste la requête avec cette valeur? Est-ce qu'il renvoie une ligne? – hgulyan

+0

ouais c'est comme ça que je l'ai testé. –

Répondre

3

probablement un ID Région dans le [61], [62], [63] colonnes qui ne correspond pas dbo.bt_Regions (ou est NULL, qui ne sera jamais satisfaire toutes les conditions de l'égalité)

INNER JOIN exige que la condition (d'égalité) doit être satisfaite - donc une ligne doit être trouvée

Si l'une de vos INNER JOINs n'est pas satisfaite, vous n'obtiendrez aucune ligne.

Vous devez soit corriger vos clés étrangères pour être valide ou modifier un LEFT JOIN avec une gestion appropriée des NULLs lorsque le côté droit n'a pas de lignes répondant aux critères de jointure

+0

Ouais, il devrait changer le INNER JOIN à LEFT JOIN. – hgulyan

+0

c'est exactement ça. Alors, comment puis-je "réparer" pour permettre NULL 61,62,63? –

+0

Il suffit de changer l'INNER JOIN à LEFT JOIN, comme je l'ai écrit ci-dessus. – hgulyan

Questions connexes