sql-server - 尝试使用参数和多个连接创建存储过程
问题描述
我正在尝试使用一个参数创建一个存储过程并连接三个表OrdersOrders
:Ordered_ProductsOrdered_Products
和ProductsProducts
。我想要所有表中没有匹配表的列。该参数在 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”附近的语法不正确。
我做错了什么?
解决方案
在@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;
推荐阅读
- c++ - C++:函数无法访问 main() 函数中定义的变量
- javascript - React - 无法从 ContextAPI 记录值,但可以设置值
- c++ - ESP32 简单按钮按住 3 秒示例。输出似乎没有意义?
- python - Backtab 在 MacOS、Zsh 中使用 Ipython
- android - RecyclerView 具有不同样式的焦点行
- java - Apache Flink 限制正在处理的数据
- javascript - 在客户端清理用户评论
- django - Django/Ajax 发送“无”值来查看
- python - Django 在每个类别旁边显示默认照片
- flutter - 无法让 Flutter 的 DataTable 与获取的数据一起工作(与硬编码数据一起工作 - 神秘)