定义计算列引用另一个表

Jam*_*mes 6 calculated-columns sql-server-2008-r2

我有两个数据库表,Team(ID, NAME, CITY, BOSS, TOTALPLAYER)和 Player(ID, NAME, TEAMID, AGE),两个表之间的关系是一对多,一个团队可以有很多玩家.

我想知道有没有办法TOTALPLAYERTeam表中定义一个列计算?

例如,如果有10个玩家' TEAMID是1,那么Team表中ID的行为1的TOTALPLAYER列具有值为10.如果我添加一个玩家,该TOTALPLAYER列的值最多为11,我不需要显式分配值给它,让它由数据库生成.有谁知道如何实现它?

Thx提前.

顺便说一句,数据库是SQL Server 2008 R2

mar*_*c_s 9

是的,你可以这样做 - 你需要一个函数来统计团队的玩家,并在计算列中使用它:

CREATE FUNCTION dbo.CountPlayers (@TeamID INT)
RETURNS INT 
AS BEGIN
    DECLARE @PlayerCount INT

    SELECT @PlayerCount = COUNT(*) FROM dbo.Player WHERE TeamID = @TeamID

    RETURN @PlayerCount
END
Run Code Online (Sandbox Code Playgroud)

然后定义您的计算列:

ALTER TABLE dbo.Team
ADD TotalPlayers AS dbo.CountPlayers(ID) 
Run Code Online (Sandbox Code Playgroud)

现在,如果您选择,则每次为所选的每个团队调用该函数.该值不会在Team表中保留 - 每次从Team表中选择时都会动态计算.

因为它的值不是持久的,所以问题实际上是:它是否需要是表上的计算列,或者如果需要,您是否可以使用存储的函数来计算播放器的数量?

  • @ HeroIverson3:是的 - 它将在每个SELECT上执行到包含该列的表(包括每个`SELECT*FROM Team`) (2认同)