【问题标题】:SQL Server 2008 - A Calculated ColumnSQL Server 2008 - 计算列
【发布时间】:2011-11-16 18:35:13
【问题描述】:

我有两张桌子:

1) 流

2) 评论

在 Streams 内部,我想创建一个 Comments 列。我希望根据匹配 StreamId 的评论数量计算 Streams 表中的评论列。

有没有一种简单的方法可以改变当前的 Streams 表?谢谢。

【问题讨论】:

    标签: sql sql-server calculated-columns


    【解决方案1】:

    如果您想要一个“真实”的列值,请考虑使用触发器。不过,另一种选择可能是计算此字段的视图 - 如果您根据主键值计算 cmets,它应该是一个非常快速的计算。

    【讨论】:

    • 是的,我是根据 PK 计算的。如何创建视图?
    【解决方案2】:

    你可以使用

    -- be careful, I do asume lot of field names
    create view withCount as
    select s.*, c.cant 
    from Streams s
    left join 
       (select Streams_ID, count(*) as cant from Comments group by Streams_ID) as c
       on s.id = c.Streams_ID
    

    然后

    select * from withCount where ... order by ...  // or whatever you want
    

    不要对这个任务使用触发器,它们更难维护和理解

    【讨论】:

    • 很好,这很完美。但我现在可以使用 withCount 代替原来的表 Streams 了吗?因为它拥有 Streams 所做的一切,包括评论计数。对吗?
    • 可以,但是请记住,当您在 Streams 表上创建新字段时,您需要重新编译 withCount 视图,因为它可以识别这些新字段。而且,Luis Siquot,非常高兴您提到了在这种情况下维护的触发问题。确实如此。
    • 简单的答案:您可以将视图用于选择而不是表格。复杂的答案:您可以在视图上创建触发器来管理删除、更新和插入(不推荐也用于此简单任务),因为此操作直接使用表。
    猜你喜欢
    • 2011-04-11
    • 2012-10-21
    • 2019-07-05
    • 1970-01-01
    • 2023-04-08
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多