Создание функции SQL
Есть таблица Туры с полями:
ID_тураСтрана,Город,Отель,Количество_звезд,Длительность,Цена_для_взрослых,Цена_для_детей,Цена_для_младенцев.
Также есть другая таблица Путевки с полями:
ID_путевки,Количество_взрослых,Количество_детей,Количество_младенцев,Стоимость- нужно вычислить.
Необходимо получить доступ к данным из таблицы Туры.
Т.е. в таблице путевки есть поле стоимость которая должна быть вычисляемым столбцом. Расчет по формуле : (@Количество_взрослых * Туры.Цена_для_взрослых)+ (@Количество_детей * Туры.Цена_для_детей)+(@Количество_младенцев * Туры.Цена_для_младенцев)
Написал функцию, но получаю ошибку связанную с неправильным синтаксисом около SELECT
CREATE FUNCTION dbo.GetValue(@Количество_взрослых INT,
@Количество_детей INT,
@Количество_младенцев INT)
RETURNS MONEY
AS
SELECT (@Количество_взрослых * Туры.Цена_для_взрослых) +
(@Количество_детей * Туры.Цена_для_детей) +
(@Количество_младенцев * Туры.Цена_для_младенцев)
FROM dbo.Туры ;
CREATE TABLE dbo.Путевки(
ID_путевки INT IDENTITY(1,1),
Количество_взрослых INT NOT NULL,
Количество_детей INT NOT NULL,
Количество_младенцев INT NOT NULL,
Стоимость AS dbo.GetValue(Количество_взрослых,
Количество_детей,
Количество_младенцев)
PRIMARY KEY(ID_путевки)
);
Ответы (1 шт):
Автор решения: Yitzhak Khabinsky
→ Ссылка
Пожалуйста, попробуйте следующее решение.
Несколько наблюдений:
- Это скалярная функция, но в таблице может быть много строк. Вот
почему мне пришлось добавить
TOP (1). Это вопрос для вашей логики. Я не уверен, что это правильно. - Оператор RETURN отсутствовал.
SQL
CREATE FUNCTION dbo.GetValue(@Количество_взрослых INT,
@Количество_детей INT,
@Количество_младенцев INT)
RETURNS MONEY
AS
BEGIN
RETURN (SELECT TOP(1) (@Количество_взрослых * Туры.Цена_для_взрослых) +
(@Количество_детей * Туры.Цена_для_детей) +
(@Количество_младенцев * Туры.Цена_для_младенцев)
FROM dbo.Туры);
END