跨表更新

时间:2015-06-26 10:36:36

标签: sql-server-2008

我需要在我的数据库中设置一些值,但我无法使其工作。 (我使用的是SSMS 2008 R2)

所涉及的表格为dbo.Scalesdbo.PosScore

dbo.Scales包含四列:

  1. Grade (varchar)
  2. Upper Bound (int)
  3. Lower Bound (int)
  4. Award (varchar)
  5. dbo.PosScore有两列:

    1. Possible score (int)
    2. Grade (varchar)
    3. 我需要根据dbo.PosScore表中给出的界限,在dbo.Scales表中填入适当的等级。

      最好是参考,即如果我改变边界,那么表格会相应调整。

      我应该怎么做?

1 个答案:

答案 0 :(得分:1)

如果您希望在更改PosScore中的值时Scales中的值发生更改,则基本上有两个选项:在Scales上创建一个触发器(重新创建)每当需要(或更新它)时使用PosScore表,或使用动态变化的视图。除非需要更改的数据量过大且重新计算PosScore值需要太长时间,否则视图应该是最佳选择。

创建视图的一种方法是使用一个合适的表,其数字范围覆盖上限和下限。幸运的是,SQL Server有一个可用于此目的的系统表(假设范围在0-2047范围内。

创建视图的查询可能如下所示:

create view PosScore as
select s.Grade, number as "Possible score"
from master..spt_values v
join scales s on v.number <= s.UpperBound and v.number >= s.LowerBound
and v.type = 'P'

SQL Fiddle demo