存储过程返回一个空值

时间:2012-07-30 11:01:32

标签: sql tsql stored-procedures

我创建了以下存储过程:

订单详细信息 - Id(int), OrderId(int), AnniID(int), Quantity(int), UnitCost(money)

周年纪念 - AnniID (int), Title( varchar(50) )

AnniID将是连接2个表的foreignKey。

当我执行存储过程时,尽管它实际上在数据库中有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

2 个答案:

答案 0 :(得分: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的OrderDetails如何不等于@AnniID

答案 1 :(得分:0)

您的查询对于您的编写方式有点混淆;

首先,你已经在AnniId上加入了两个表:

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

其次,您希望OrderDetails表中的OrderIds位于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

您的查询中有几个冲突的语句。你到底想要完成什么?