# "OrdersDetail" 存储过程

说明：

本存储过程以OrderID为输入，对于给定的OrderID返回一个recordset和3个输出参数，包含了关于该OrderID的详细信息。

定义：

    	CREATE Procedure CMRC_OrdersDetail
    	(
    		@OrderID    int,
    		@CustomerID int,
    		@OrderDate  datetime OUTPUT,
    		@ShipDate   datetime OUTPUT,
    		@OrderTotal money OUTPUT
    	)
    	AS

    	/* Return the order dates from the Orders
    		Also verifies the order exists for this customer. */
    	SELECT
    		@OrderDate = OrderDate,
    		@ShipDate = ShipDate

    	FROM
    		CMRC_Orders

    	WHERE
    		OrderID = @OrderID
    		AND
    		CustomerID = @CustomerID

    	IF @@Rowcount = 1
    	BEGIN

    	/* First, return the OrderTotal out param */
    	SELECT
    		@OrderTotal = Cast(SUM(CMRC_OrderDetails.Quantity * CMRC_OrderDetails.UnitCost) as money)

    	FROM
    		CMRC_OrderDetails

    	WHERE
    		OrderID= @OrderID

    	/* Then, return the recordset of info */
    	SELECT
    		CMRC_Products.ProductID,
    		CMRC_Products.ModelName,
    		CMRC_Products.ModelNumber,
    		CMRC_OrderDetails.UnitCost,
    		CMRC_OrderDetails.Quantity,
    		(CMRC_OrderDetails.Quantity * CMRC_OrderDetails.UnitCost) as ExtendedAmount

    	FROM
    		CMRC_OrderDetails
    	INNER JOIN CMRC_Products ON CMRC_OrderDetails.ProductID = CMRC_Products.ProductID

    	WHERE
    		OrderID = @OrderID

    	END

用到的数据库表：

Orders: Order表包含系统里全部订单的头信息（即所有实际购买的商品。在系统中，为了设置一个订单，用户必须为其购物车中的商品付帐)。在创建一个订单时，会在Orders表中添加一条记录，包括CustomerID, OrderDate和ShipDate.然后，订单中产品的所有相关信息被添加到下面将要讨论的OrderDetails表中。注意：如果没有提供OrderDate 或ShipDate，则会输入当前时间作为默认值。

OrderDetails: OrderDetails表系统中每个订单的详细产品信息。OrderDetails表为订单中的每个产品创建一个记录。包含该产品的ProductID, Quantity 和UnitCost。在OrderDetails表和Orders表间存在多对一的关系。注意：该表的主键是由OrderID与ProductID组成的复合键（因为这两项是保证记录唯一性的最低要求）

Products: Products表包含所有关于ASP.NET商务网站的产品信息,它的主键是 ProductID.需要说明的是，产品的说明要限定在3800个字符内。