SQL Server Update列基于另一个表的值

时间:2018-06-17 11:02:08

标签: sql sql-server

如果我应该使用触发器或程序,请提供帮助。如果ScaleRating中的得分落在GRatingScale中的最低和最高得分之间,我正试图从GSelfAssessment更新表GRatingScale中的GSelfAssessment

GSelfAssessment表

enter image description here

GRatingScale表

enter image description here

优选地,应该在更新或插入的每一行上实现这一点。我相信SQL触发器是最合适的。在研究之后,我理解了触发器中插入/删除的概念。例如。

CREATE TRIGGER [dbo].[TR_GSelfAssessment_update] ON [dbo].[GSelfAssessment]
FOR UPDATE
AS
BEGIN

    UPDATE GSelfAssessment
    SET GSelfAssessment.ScaleRating= (Select )---this is where i have a problem-----
  END

我相信这里有Guru可以帮我解决这个问题。我会学到很多东西。

2 个答案:

答案 0 :(得分:2)

SQL Server支持计算列。如果您希望ScaleRating始终与其余数据保持一致,那么这是最好的方法:

alter table GSelfAssessment
    add ScaleRating as ( . . . );

这会添加一个新的"列"在查询中使用该值时计算。如果计算成本很高或者您想构建索引,那么使用persisted,这样该值实际上与其余数据一起存储 - 并在需要时重新计算。

您也可以在create table语句中添加计算列。如果您已经创建了表,则可以删除该列并重新添加或修改它。

答案 1 :(得分:1)

你不应该有那个专栏。您需要时加入评级表。如果视图更容易,您可以创建视图。

select … 
from GSelfAssessment  a
inner join 
GRatingScale  r 
on (a.Score>r.MinScore and a.Score<=r.MaxScore)

根据需要调整/创建视图