Sql server SQL维护另一个表中相关记录的最新计数

Sql server SQL维护另一个表中相关记录的最新计数,sql-server,Sql Server,我有两个相关的表格。一个用于文章类别,另一个用于文章类别。我想在“Categories”表中按类别维护文章数量的计数。我的表格如下: 类别 ID | CatName | ArticleCount 1 | Cat1 | 2 | Cat2 | 3 | Cat3 | 文章 ID | CatID | ArticleName 1 | 1 | Art1 2 | 2 | Art2 3 | 3 | Art3 4 | 1 | Art4 使用

我有两个相关的表格。一个用于文章类别,另一个用于文章类别。我想在“Categories”表中按类别维护文章数量的计数。我的表格如下:

类别

ID | CatName | ArticleCount
1  | Cat1    | 
2  | Cat2    | 
3  | Cat3    | 
文章

ID | CatID | ArticleName
1  | 1     | Art1
2  | 2     | Art2
3  | 3     | Art3
4  | 1     | Art4
使用SQL,在添加文章时,如何连续更新Categories表,以便按类别维护文章数量的最新计数?鉴于我提供的示例数据,我设想我的Categories表最终会是这样:

类别(根据Articles表中的相关记录自动更新ArticleCount)


您可以很容易地做的一个选择是在Categories表中添加ArticleCount作为计算字段,该字段指向一个UDF,该UDF统计该类别的文章

CREATE FUNCTION [dbo].[fn_cnt](@CatID   INT)
RETURNS int
AS
BEGIN
    RETURN (SELECT COUNT(1) FROM Articles WHERE CatID = @CatID)
END
GO

CREATE TABLE Categories(
    [Id]        INT,
    [CatName]   [varchar](64),
    [ArticleCount]  AS ([dbo].[fn_cnt]([Id]))
)
GO

希望这会有所帮助

在我看来,持续更新计数将消耗比根据需要计算更多的开销。我也不相信这会被视为良好的数据库实践。使用count非常有效,因为它只需要遍历索引。我相信您存储计数是有原因的,因此与我们共享可能是一个好主意。我需要存储计数以显示在网页上。众所周知,UDF会对性能产生负面影响,但取决于卷,性能成本可以忽略不计。如果是我,我会在需要的地方选择计数。这样,我就不依赖于支持UDF和计算列的数据库。。。。接吻-保持笔直和简单。
CREATE FUNCTION [dbo].[fn_cnt](@CatID   INT)
RETURNS int
AS
BEGIN
    RETURN (SELECT COUNT(1) FROM Articles WHERE CatID = @CatID)
END
GO

CREATE TABLE Categories(
    [Id]        INT,
    [CatName]   [varchar](64),
    [ArticleCount]  AS ([dbo].[fn_cnt]([Id]))
)
GO