2010-07-22 94 views
0

我有以下存儲過程有效的存儲過程不返回

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) 

當我從表一中有效身份證件執行它,它不返回任何結果的任何結果。我可能會錯過什麼?

PS:在「最」有效的ID的我傳遞給存儲過程,我得到我正在尋找的結果。

例如:10010將返回結果,但10104不會。兩者都是數據庫中的有效記錄。

+0

你嘗試執行您剛用該值查詢?它是否返回任何行? – hgulyan 2010-07-22 05:45:06

+0

是的,這就是我對它的測試。 – 2010-07-22 05:47:50

回答

3

大概在一個地區ID的[61],[62],[63]的列這是不dbo.bt_Regions(或爲NULL,這將永不滿足任何相等條件)

INNER JOIN要求(相等)條件得到滿足 - 所以必須找到一行

如果任何一個INNER JOIN沒有滿足條件,則不會得到任何行。

你要麼需要糾正你的外鍵爲有效或改變一個LEFT JOIN與空值的適當處理時,右手邊有沒有行滿足連接標準

+0

是的,他應該將INNER JOIN改爲LEFT JOIN。 – hgulyan 2010-07-22 05:46:13

+0

就是這樣。那麼如何「修復它」以允許NULL 61,62,63? – 2010-07-22 05:47:03

+0

只要將INNER JOIN更改爲LEFT JOIN,如上所述。 – hgulyan 2010-07-22 05:47:46