不允许在另一个计算列中使用计算列——我怎么能允许它

问题描述

CREATE TABLE [dbo].[tbl_Marks](
    [ID] [int] IDENTITY(1,1) NOT NULL,[SID] [int] NOT NULL FOREIGN KEY REFERENCES tbl_Student(ID),[Year] [char](1) NOT NULL,[ExamType] [char](5) NOT NULL,[S1] [int] null constraint s1_marks check (s1 >=0 and s1<=25),[S2] [int] null constraint s2_marks check (s2 >=0 and s2<=25),[S3] [int] null constraint s3_marks check (s3 >=0 and s3<=25),[S4] [int] null constraint s4_marks check (s4 >=0 and s4<=25),[S5] [int] null constraint s5_marks check (s5 >=0 and s5<=25),[TotalMarks] AS (S1+S2+S3+S4+S5),[Avg] AS ((S1+S2+S3+S4+S5)/5),[Percentage] AS (((S1+S2+S3+S4+S5)/125.0)*100),[Rank] [tinyint] NULL,[Grade] [char](1) NULL,[CreatedBy] [varchar](25) NULL,[CreatedOn] [datetime] NULL,[ModifiedBy] [varchar](25) NULL,[ModifiedOn] [datetime] NULL,[Remarks] [varchar](500) NULL
    CONSTRAINT [PK_tbl_Marks] PRIMARY KEY CLUSTERED([ID] ASC)
);

我创建了关于表,我想根据百分比显示成绩,我为此创建了函数,我删除了现有的列名是“成绩”,我使用alter命令重新添加了“成绩”列

ALTER TABLE tbl_marks DROP COLUMN Grade

ALTER TABLE tbl_Marks ADD Grade AS dbo.fn_CalculateGrade(percentage)

添加“成绩”列时,我收到此错误

消息 1759,级别 16,状态 0,第 47 行 不允许在另一个计算列定义中使用表 'tbl_Marks' 中的计算列 'Percentage'。

这是我的功能

CREATE FUNCTION dbo.fn_CalculateGrade(@Percentage DECIMAL)
RETURNS VARCHAR(10)
AS
BEGIN
    -- Declare the return variable here
    DECLARE @Grade VARCHAR(10)
    SET @Grade = (CASE WHEN ISNULL(@Percentage,0) BETWEEN 60.00 AND 70.99 THEN 'D'
  WHEN ISNULL(@Percentage,0) BETWEEN 71.00 AND 80.99 THEN 'C'
  WHEN ISNULL(@Percentage,0) BETWEEN 81.00 AND 90.99 THEN 'B'
  WHEN ISNULL(@Percentage,0) BETWEEN 91.00 AND 100.00 THEN 'A' END)

    RETURN @Grade

END
GO

并且我尝试添加 out 函数,该查询也是:

  UPDATE tbl_Marks SET Grade= (CASE WHEN ISNULL(Percentage,0) BETWEEN 60.00 AND 70.99 THEN 'D'
  WHEN ISNULL(Percentage,0) BETWEEN 71.00 AND 80.99 THEN 'C'
  WHEN ISNULL(Percentage,0) BETWEEN 81.00 AND 90.99 THEN 'B'
  WHEN ISNULL(Percentage,0) BETWEEN 91.00 AND 100.00 THEN 'A' END)

我怎样才能做到这一点而不会出现任何错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)