ALTER PROCEDURE [dbo].[Sp_TotalMarks]
AS
BEGIN
SELECT Student_Id, Stu_Name, Maths, English, Hindi,
(Maths + English + Hindi) AS 'Total',
CAST(CAST((Maths + English + Hindi) AS NUMERIC(8,2)) / 300 * 100 AS NUMERIC(8,2)) AS 'Percentage'
FROM tbl_Marks
END
这是我用来显示百分比的程序。 如果一个班级中有100名学生,并且我想显示每个学生的百分比,那么动态计算%年龄并返回答案的SP将非常耗时。之前我试图在tbl_Marks本身中添加一列百分比。是否可以在存储过程中实现触发器,该过程被调用' INSERT'或者'更新'对tbl_Marks的操作。我从来没有使用过触发器。如果你能用一个查询解释这个问题的解决方案那就太好了。提前谢谢。
答案 0 :(得分:1)
computed column
可以使用表中其他列的数据来计算它所属的列的值。而computed column
是一个虚拟列,没有物理存储在表中,除非该列标记为PERSISTED。
将表定义更改为:
ALTER TABLE tbl_Marks ADD total AS (Maths + English + Hindi) PERSISTED;
ALTER TABLE tbl_Marks ADD Percentage AS CAST(CAST((Maths + English + Hindi) AS NUMERIC(8,2)) / 300 * 100 AS NUMERIC(8,2)) PERSISTED;
这将向表中添加两列,这些列将反映每次更新或插入时的计算值。
您可以查看DEMO here。希望这会有所帮助!!!