使用预制功能创建一个视图,用于消费税金额和总价格(价格+消费税)

时间:2018-04-27 06:54:04

标签: sql sql-server function view sql-server-2014

我正在努力调用一个功能,以便创建一个销售详情列表,包括GST金额列和每个销售的总销售价格(原价加GST)。

这是我创建的功能:

CREATE PROCEDURE dbo.sp_ReturnTaxedPrice

    @ProductID int,
    @GST float,
    @GSTPrice float output

AS
BEGIN

    DECLARE @Price float
    SET @Price = (SELECT Price FROM Products WHERE ProductID = @ProductID)
    SET @GSTPrice = @Price * (1 - @GST)
END

以下是我希望使用该功能在表格末尾添加两列以显示每笔销售的商品及服务税金额和总价格金额(原价加商品及服务税)的视图:

CREATE VIEW vw_SaleDetails
AS
SELECT 
    Sales.SaleNo, 
    Sales.SaleDate, 
    Customer.FirstName, 
    Customer.LastName,
    Category.Category, 
    Products.ProductDescription, 
    Type.Type, 
    Products.Year, 
    Products.Price

FROM Category JOIN Customer ON Category.CategoryID = Customer.CategoryID
    JOIN Sales ON Customer.CustomerID = Sales.CustomerID
    JOIN SalesProducts ON Sales.SaleNo = SalesProducts.SaleNo
    JOIN Products ON Products.ProductID = SalesProducts.ProductID
    JOIN ProductType ON Products.ProductID = ProductType.ProductID
    JOIN Type ON Type.TypeID = ProductType.TypeID

1 个答案:

答案 0 :(得分:0)

你想要一个功能,而不是一个程序:

CREATE FUNCTION dbo.sp_ReturnTaxedPrice (
    @ProductID int,
    @GST float
) RETURNS float
AS
BEGIN
    DECLARE @Price float;

    SET @Price = (SELECT Price FROM Products WHERE ProductID = @ProductID);

    SET @GSTPrice = @Price * (1 - @GST);

    RETURN(@GSTPrice);
END;

然后,你可以这样做:

select . . .
       dbo.sp_ReturnTaxedPrice(@ProductID, @GST)
. . .

现在有些评论:

  • 将此逻辑放在用户定义的函数(或存储过程)中会增加很多开销。你应该把算术放在代码中。
  • float不是货币值的正确数据类型。使用MONEYDECIMAL / NUMERIC
  • 如果您不理解原因,请了解定点与浮点类型。