пользовательская скалярная функция для генерации вычисляемого столбца - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть база данных с двумя таблицами, т. Е. (Installment и InstallmentPlan). В таблице рассрочки есть количество столбцов. Я хочу добавить одно новое вычисляемое имя столбца SurchargeCalculated (S C). Расчет для S C таков:

SC = (Installment.Amount * Installment.days * (InstallmentPlan.InstPercentage /365 /100)) 

Я создал пользовательскую функцию SurchargeCal, имеющую 3 параметра: Amount, days и InstPercentage. Проблема в том, что когда я добавляю вычисляемый столбец в таблицу взносов и оттуда вызываю скалярную функцию, для сакрального веселья c требуется параметр InstPercetage 2-й таблицы (InstallmentPlan). Я знаю, что рекомендуется использовать представление, но это усложнит мою проблему, так как я использую таблицу взносов в C#.

. Любая помощь будет чрезвычайно полезна.

Моя скалярная функция

USE [myDB]
GO
/****** Object:  UserDefinedFunction [dbo].[SurchargeCal]    Script Date: 17/02/2020 2:21:15 PM 
******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
ALTER FUNCTION [dbo].[SurchargeCal] 
(
    -- Add the parameters for the function here
    @days as int,
    @amount as money,
    @surchargePerc as decimal
)
RETURNS decimal
AS
BEGIN
    -- Declare the return variable here
    DECLARE @result as decimal =0;

    -- Add the T-SQL statements to compute the return value here
    --SELECT <@ResultVar, sysname, @Result> = <@Param1, sysname, @p1>

        if  @days = 0
            set @result = 0
        else if (@days > 0 and @amount > 0)
            set @result = (@days * @amount * (@surchargePerc/ 365 / 100))
        else
            set @result = 0


    -- Return the result of the function
    RETURN @result

END

, тогда ниже таблицы ADD команда XXXX является проблемой

USE [myDB]
GO
ALTER TABLE dbo.Installment  
ADD SurchargeCalculated AS dbo.SurchargeCalc(days,Amount, XXXX) --where XXX should be InstPercenatage
GO

1 Ответ

0 голосов
/ 18 февраля 2020

Поскольку вы не можете использовать подзапрос непосредственно в вычисляемом столбце, вам нужно будет сделать это в самой скалярной функции:

CREATE FUNCTION SurchargeCal(@days as integer, @amount as money, @PlanKey as integer)
RETURNS decimal
AS
BEGIN
    DECLARE @result as decimal = 0;

    SELECT @result = @amount * @days * InstPercentage / 365 / 100
    FROM InstallMentPlan 
    WHERE PlanKey = @PlanKey    

    RETURN @result   
END

Теперь вы можете создать вычисляемый столбец, передав вместо него PlanKey его InstPercentage.

ALTER TABLE dbo.Installment  
ADD SurchargeCalculated AS dbo.SurchargeCalc(days, Amount, PlanKey)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...