首页 > 解决方案 > 尝试使用参数和多个连接创建存储过程

问题描述

我正在尝试使用一个参数创建一个存储过程并连接三个表OrdersOrdersOrdered_ProductsOrdered_ProductsProductsProducts。我想要所有表中没有匹配表的列。该参数在 java 中用于让客户能够根据他们的用户 ID 搜索订单。

这就是我想出的:

CREATE PROCEDURE sp_seeOrder
    @user_id
AS
    SELECT 
        O.order_id, O.order_quantity, O.user_id, O.Status, O.order_date, 
        O_P.orderID, O_P.product_code, 
        P.product_id, P.product_name, P.price
    FROM 
        Orders AS O
    FULL JOIN 
        Ordered_Products ON O.order_id = O_P.orderID,
    RIGHT JOIN 
        Products P ON O_P.product_code = P.product_id
    WHERE 
        user_id = @user_id;

我收到多个错误:

消息 156,级别 15,状态 1,过程 sp_seeOrder,第 4 行 [批处理开始行 213]
关键字“SELECT”附近的语法不正确。

消息 156,级别 15,状态 1,过程 sp_seeOrder,第 9 行 [批处理开始行 213]
关键字“RIGHT”附近的语法不正确。

我做错了什么?

标签: sql-servertsqljoinstored-proceduresouter-join

解决方案


在@user_id 参数中放入数据类型。我假设它是一个 INT,因为它是一个 ID。并删除额外的,在“ON O.order_id = O_P.orderID”之后。更正后的查询应如下所示:

CREATE PROC sp_seeOrder
@user_id INT
AS
SELECT 
    O.order_id, O.order_quantity, O.user_id, O.Status, O.order_date, O_P.orderID, 
    O_P.product_code, P.product_id, P.product_name, P.price
FROM Orders AS O
FULL JOIN Ordered_Products AS O_P
    ON O.order_id = O_P.orderID
RIGHT JOIN Products P
    ON O_P.product_code = P.product_id
WHERE user_id = @user_id;

推荐阅读