有效的存储过程不返回任何结果

时间:2010-07-22 05:39:37

标签: sql-server stored-procedures

我有以下存储过程

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)

当我从表中使用 VALID ID 执行它时,它不会返回任何结果。我可能会错过什么?

PS:在“最”有效的ID上,我传递给存储过程,我得到了我正在寻找的结果。

示例:10010将返回结果,但10104不会。两者都是数据库中的有效记录。

1 个答案:

答案 0 :(得分:3)

[61],[62],[63]列中的区域ID可能不在dbo.bt_Regions中(或者是NULL,永远不会满足任何相等条件)

INNER JOIN要求满足(相等)条件 - 因此必须找到一行

如果您的任何一个INNER JOIN没有满足条件,您将不会获得任何行。

当右侧没有满足连接条件的行时,您需要更正外键有效或更改为LEFT JOIN并适当处理NULL