SQL Server视图和存储过程

问题描述 投票:0回答:1

我正在在私有框架上使用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

我在想,也许有一种方法可以将存储过程添加到我的视图中?因为从我看来,不可能将参数传递给视图。

有人可以帮我吗?

谢谢

sql-server stored-procedures view
1个回答
0
投票

可以使用EXEC调用存储过程:

EXEC <sp_NameHere> @Parameter = <ParameterValueHere>

根据您的情况:

EXEC [dbo].[astp_Sales_OrdersLinesProductsByID] @OrderId = 1

您无法像从视图或表中进行选择一样从存储过程中进行选择。

但是,我完全同意SMor(例如:术语“视图”在SQL中表示完全不同的东西)。您应该重新考虑您的解决方案,因为我认为您使用的框架将提供一种构建查询和/或以更有效的方式过滤结果的方法。

© www.soinside.com 2019 - 2024. All rights reserved.