2012-07-30 3 views
0

я создал следующую хранимую процедуру:Хранимая процедура возвращает пустое значение

OrderDetails - Id(int), OrderId(int), AnniID(int), Quantity(int), UnitCost(money)

Anniversary - AnniID (int), Title(varchar(50))

AnniID будет ForeignKey, чтобы соединить 2 таблицы.

Когда я выполняю хранимую процедуру, он ничего не возвращает, несмотря на то, что на самом деле имеет 1 элемент в базе данных.

Есть ошибки в коде? Или я неправильно присоединился?

ALTER PROCEDURE dbo.Selectpurchasedwithproducts @AnniID INT 
AS 
    SELECT TOP 5 OrderDetails.AnniID, 
       Anniversary.Title, 
       Sum(OrderDetails.Quantity) AS TotalNum 
    FROM OrderDetails 
      INNER JOIN Anniversary 
      ON OrderDetails.AnniID = Anniversary.AnniID 
    WHERE OrderId IN (
         /* This inner query should retrieve all orders that have contained the anniID */ 
         SELECT DISTINCT OrderId 
         FROM OrderDetails 
         WHERE AnniID = @AnniID) 
      AND OrderDetails.AnniID != @AnniID 
    GROUP BY OrderDetails.AnniID, 
       Anniversary.Title 
    ORDER BY TotalNum DESC 

    RETURN 
+0

Почему вы используете ** RETURN ** в конце ?? а также просто попробуйте запустить запрос, вручную передав @AnniID –

+0

, когда я выполню код, всплывающее окно и я вручную вношу в AnniID, но ничего не возвращаю. – user1529419

+0

Какой результат вам нужен на самом деле .. просто результаты innerjoin ..? –

ответ

0

Похоже, ваше заявление мне

WHERE OrderId IN 
(  
    /* This inner query should retrieve all orders 
     that have contained the anniID */ 
    SELECT DISTINCT OrderId  
     FROM OrderDetails  
     WHERE AnniID = @AnniID 
) 
AND OrderDetails.AnniID != @AnniID 

Как Детали_Заказов, которые равны @AnniID не равна @AnniID?

0

Ваш запрос немного путается с тем, как вы его написали;

Во-первых, вы воссоединились две таблицы на AnniId:

FROM OrderDetails 
INNER JOIN Anniversary 
    ON OrderDetails.AnniID = Anniversary.AnniID 

Во-вторых, вы хотите OrderIds из таблицы OrderDetails где AnniId = @AnniId

WHERE OrderId IN 
(
    /* This inner query should retrieve all orders that have contained the anniID */ 
    SELECT DISTINCT OrderId 
    FROM OrderDetails 
    WHERE AnniID = @AnniID 
) 

Но тогда вы хотите ORDERDETAILS где AnniID не равно @AnniId:

AND OrderDetails.AnniID != @AnniID 

Вы h ave несколько противоречивых утверждений в вашем запросе. Что именно вы пытаетесь достичь?

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