微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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 举报,一经查实,本站将立刻删除。