如果我应该使用触发器或程序,请提供帮助。如果ScaleRating
中的得分落在GRatingScale中的最低和最高得分之间,我正试图从GSelfAssessment
更新表GRatingScale
中的GSelfAssessment
。
优选地,应该在更新或插入的每一行上实现这一点。我相信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可以帮我解决这个问题。我会学到很多东西。
答案 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)
根据需要调整/创建视图