Почему созданная функция T-SQL дублирует данные? - PullRequest
0 голосов
/ 28 апреля 2018

Я новичок в этом, поэтому заранее прошу прощения, если я не следовал протоколу форума!

Я пытаюсь создать функцию в T-SQL, которая вычисляет GST цены продукта на основе двух параметров; ProductID и GST_Percentage (что составляет 10%).

Если вы посмотрите изображение, приложенное к моим текущим результатам, вы увидите мою проблему. Я ожидаю, что будет возвращена одна запись, так как я только ввел одну ProductID в качестве входного параметра, НО вместо этого возвращаются все записи в таблице И ожидаемый рассчитанный GST для введенной ProductID является верным, но он также отображается для всех нежелательных записей.

Я часами пытался понять, что я делаю неправильно, но, похоже, не смог понять. Пожалуйста, помогите

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

Ниже приведен оператор SELECT, который я использовал для проверки функции.

SELECT  
    ProductID, ProductDescription, 
    Price, dbo.fn_CalculateGST(1, 0.10) AS GST 
FROM    
    Products 

Результаты вывода:

enter image description here

1 Ответ

0 голосов
/ 28 апреля 2018

Ну, вы всегда , передавая 1 в качестве первого параметра (@ProductID) в вашу функцию в вашем выражении SELECT - так что всегда вычислит 10 % от 15,00 - что составляет 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 .....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...