我正在在私有框架上使用SQL Server创建Web应用程序。该Web应用程序具有orderLines
表,该表仅应显示当前打开的特定订单的ordersLines
。
我的框架允许将视图作为数据对象传递给表。所以基本上我可以将订单行视图传递到我的表,它显示了数据库中的所有订单行,但是问题是我只需要特定订单的orderlines
。我创建了一个存储过程,该存储过程接收orderID
作为参数,但是我不知道如何使用它代替视图。
存储过程代码在下面,并且视图几乎相同,只是没有检查orderID
。
CREATE PROCEDURE [dbo].[astp_Sales_OrdersLinesProductsByID]
(@OrderId INT)
AS
SELECT
ol.OrderID, ol.Created, ol.CreatedBy, ol.Updated, ol.UpdatedBy,
ol.CUT, ol.CDL, ol.Domain, ol.ProductID, ol.Amount,
p.ProductName, p.Supplier, p.Quantity AS TotalQuantity, p.Price,
ol.PrimKey
FROM
dbo.atbl_Sales_OrdersLines AS ol
INNER JOIN
dbo.atbl_Sales_Products AS p ON ol.ProductID = p.ProductID
WHERE
ol.OrderID = @OrderId
我在想,也许有一种方法可以将存储过程添加到我的视图中?因为从我看来,不可能将参数传递给视图。
有人可以帮我吗?
谢谢
可以使用EXEC调用存储过程:
EXEC <sp_NameHere> @Parameter = <ParameterValueHere>
根据您的情况:
EXEC [dbo].[astp_Sales_OrdersLinesProductsByID] @OrderId = 1
您无法像从视图或表中进行选择一样从存储过程中进行选择。
但是,我完全同意SMor(例如:术语“视图”在SQL中表示完全不同的东西)。您应该重新考虑您的解决方案,因为我认为您使用的框架将提供一种构建查询和/或以更有效的方式过滤结果的方法。