SQL Server 2014 Ошибка: необходимо объявить скалярную переменную? Вызов функции в представлении - PullRequest
0 голосов
/ 30 апреля 2018

У меня проблема с вызовом функции в представлении, которое я пытаюсь создать. Появляющаяся ошибка: «Необходимо объявить скалярную переменную« @ProductID ». GST в« (Products.Price + GST) AS TotalPrice »также подчеркнут красным цветом как проблема. Чего мне не хватает?

Вот моя функция:

CREATE FUNCTION fn_ReturnTaxedPrice
(
	@ProductID int,
	@GST float
) 
	RETURNS float
AS
BEGIN

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

END

Вот мой взгляд:

CREATE VIEW vw_SalesDetails
AS
SELECT Sales.SaleNo, 
Sales.SaleDate, 
Customer.FirstName, 
Customer.LastName,
Category.Category, 
Products.ProductDescription, 
Type.Type, 
Products.Year, 
Products.Price,
dbo.fn_ReturnTaxedPrice(@ProductID, 0.1) AS GST,
(Products.Price + GST) AS TotalPrice
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

Ответы [ 2 ]

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

Надеюсь, это поможет.

CREATE FUNCTION fn_ReturnTaxedPrice
(
    @ProductID int,
    @GST float
) 
    RETURNS money  --this is the correct data type for money
AS
BEGIN

    DECLARE @Price money

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

    RETURN @Price * @GST 

END

Это должно работать сейчас.

CREATE VIEW vw_SalesDetails
AS
SELECT Sales.SaleNo, 
       Sales.SaleDate,
       Customer.FirstName, 
       Customer.LastName,
       Category.Category, 
       Products.ProductDescription, 
       Type.Type, 
       Products.Year, 
       Products.Price,
       dbo.fn_ReturnTaxedPrice(Products.ProductID, 0.1) AS GST, 
       dbo.fn_ReturnTaxedPrice(Products.ProductID, 0.1) + Products.Price AS TotalPrice
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
0 голосов
/ 30 апреля 2018

- Вы должны передать ProductId, связанный со столбцом таблицы, вместо переменной @ProductID.

CREATE VIEW vw_SalesDetails
AS
SELECT Sales.SaleNo, 
Sales.SaleDate, `enter code here`
Customer.FirstName, 
Customer.LastName,
Category.Category, 
Products.ProductDescription, 
Type.Type, 
Products.Year, 
Products.Price,
dbo.fn_ReturnTaxedPrice(Products.ProductID, 0.1) AS GST,
(Products.Price + GST) AS TotalPrice
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...