параметр функции sql в возвращаемом значении функции - PullRequest
0 голосов
/ 27 апреля 2018

sql посмотреть, как я могу вернуть возвращаемое значение из функции в функцию

select 

dbo.fn_CalculatePrice
(
p.Price, 
p.CargoPrice, 
p.Factor, 
p.PointRatio,
null, 
p.OperactivePromoCode, 
SELECT IncludingCargoPrice FROM [dbo].[fn_Parameter](),
SELECT IncludingProductKdv FROM [dbo].[fn_Parameter]()) AS Price 
From Product as p

[dbo].[fn_CalculatePrice] func parameters
(
    @Price money,
    @CargoPrice money,
    @CatFactor decimal(8,4), 
    @PointRatio decimal(8,4),
    @HBFactor decimal(8,4),
    @PromoCode nvarchar(50),
    @includingCargoPrice bit,
    @includingProductKdv bit
)

fn_Parameter func return table
{
IncludingCargoPrice bit,
IncludingProductKdv bit,
}

Ошибка: неправильный синтаксис рядом с ключевым словом «SELECT»

1 Ответ

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

Вы можете использовать любой из этих 2 подходов:

1) Определить каждый параметр как скалярную переменную.

DECLARE @IncludingCargoPrice BIT = (SELECT IncludingCargoPrice FROM [dbo].fn_Parameter())
DECLARE @IncludingProductKdv BIT = (SELECT IncludingProductKdv FROM [dbo].fn_Parameter())

SELECT
    dbo.fn_CalculatePrice(
        p.Price, 
        p.CargoPrice, 
        p.Factor, 
        p.PointRatio,
        null, 
        p.OperactivePromoCode, 
        @IncludingCargoPrice,
        @IncludingProductKdv) AS Price
From 
    Product as p

2) SELECT непосредственно в вашем запросе (необходимо убедиться, что таблица параметров содержит только одну строку, иначе функция будет применяться несколько раз для каждого продукта по строке параметра). Вы можете фильтровать строки с помощью WHERE или с условием в INNER JOIN (вместо CROSS JOIN, которое я написал в качестве примера).

SELECT
    dbo.fn_CalculatePrice(
        p.Price, 
        p.CargoPrice, 
        p.Factor, 
        p.PointRatio,
        null, 
        p.OperactivePromoCode, 
        X.IncludingCargoPrice,
        X.IncludingProductKdv) AS Price
From 
    Product as p
    CROSS JOIN [dbo].fn_Parameter() AS X
...