2010-07-22 3 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) 

И когда я исполню ее с ДЕЙСТВИТЕЛЬНО ID из таблицы, это не возвращающееся никаких результатов. Что я могу пропустить?

PS: на «самом» действительном удостоверении личности я передаю хранимую процедуру, я получаю результаты, которые я ищу.

Пример: 10010 вернет результаты, но 10104 не будет. Оба являются действительными записями в базе данных.

+0

ли вы пытаетесь выполнить ваш только запрос с этим значением? Возвращает ли он какой-либо ряд? – hgulyan

+0

Да, так я его протестировал. –

ответ

3

Вероятно, область ID в [61], [62], [63] колонны, которая не является в dbo.bt_Regions (или NULL, который никогда не будет удовлетворять любое условие равенства)

INNER JOIN требует, чтобы (условие равенства), поэтому необходимо найти строку

Если какой-либо из ваших INNER JOINs не имеет удовлетворительного условия, вы не получите строк.

Вам нужно будет либо скорректировать ваши внешние ключи, чтобы быть действительными или изменить к LEFT JOIN с соответствующей обработкой значения NULL, когда правая рука не имеет ни одной строки, удовлетворяющую Соединить критерии

+0

Да, он должен изменить INNER JOIN на LEFT JOIN. – hgulyan

+0

это именно он. Итак, как я могу «исправить», чтобы разрешить NULL 61,62,63? –

+0

Просто измените INNER JOIN на LEFT JOIN, как я писал выше. – hgulyan

Смежные вопросы