为什么创建的T-SQL函数会复制数据?

时间:2018-04-28 20:43:51

标签: sql-server function

我是新手,所以如果我没有遵循论坛协议,我会提前道歉!

我正在尝试在T-SQL中创建一个函数,它根据两个参数计算产品价格的GST; ProductIDGST_Percentage ProductID (这是10%)。

如果您检查我当前输出结果附带的图像,您将看到我的问题。我希望返回一条记录,因为我只输入了一个ProductID作为输入参数BUT而是返回表中的所有记录,并且输入的CREATE FUNCTION fn_CalculateGST (@ProductID INT, @GST_Percentage FLOAT) RETURNS MONEY AS BEGIN DECLARE @Price MONEY SET @Price = (SELECT Price FROM Products WHERE ProductID = @ProductID) RETURN @Price * @GST_Percentage END GO 的预期计算GST是正确的但是它还会显示所有不需要的记录。

我已经尝试了几个小时来弄清楚我做错了什么,但似乎无法弄明白。请帮忙

SELECT

下面是我用来测试函数的SELECT ProductID, ProductDescription, Price, dbo.fn_CalculateGST(1, 0.10) AS GST FROM Products 语句。

self.nodes(at: pointOfTouch)

输出结果:

enter image description here

1 个答案:

答案 0 :(得分:2)

嗯,您总是1作为您的第一个参数(@ProductID)传递到SELECT语句中的函数中 - 所以它会总是计算15.00的10% - 这是1.50 - 所以输出 IS 正确!

但你可能想要这样的东西:

SELECT
    ProductID, ProductDescription,
    Price, dbo.fn_CalculateGST(ProductID, 0.10) AS GST
    --                         ********* pass in ProductID - not always 1 !!!!
FROM
    Products

请参阅:您需要将ProductID列值传入您的函数 - 并不总是1 .....