基于事务表的SQL Server计算列

时间:2019-04-23 12:55:40

标签: sql-server database

我正在构建一个用于跟踪员工培训的Web应用程序。

将为每位员工分配由不同课程组成的模块。

我有两个事务处理表,用于跟踪课程和模块的员工状态,另一个用于跟踪将哪些课程分配给了哪些模块。

这是交易表。

模块内容:

  CREATE TABLE [dbo].[ModuleContent](
[ModuleID] [int] NOT NULL,
[CourseID] [int] NOT NULL,
[Status] [nvarchar](50) NULL,
CONSTRAINT [PK_ModuleContent] PRIMARY KEY CLUSTERED 
(
[ModuleID] ASC,
[CourseID] ASC
)

模块注册:

  CREATE TABLE [dbo].[ModuleEnrollment](
[EmployeeID] [int] NOT NULL,
[ModuleID] [int] NOT NULL,
[Status] [nvarchar](50) NULL,
CONSTRAINT [PK_ModuleEnrollment_1] PRIMARY KEY CLUSTERED 
(
[EmployeeID] ASC,
[ModuleID] ASC
)

EmployeeCourseStatus:

   CREATE TABLE [dbo].[EmployeeCourseStatus](
[EmployeeID] [int] NOT NULL,
[ModuleID] [int] NOT NULL,
[CourseID] [int] NOT NULL,
[Status] [nvarchar](50) NULL,
CONSTRAINT [PK_EmployeeCourseStatus] PRIMARY KEY CLUSTERED 
(
[EmployeeID] ASC,
[ModuleID] ASC,
[CourseID] ASC
)

截至目前,当员工完成将课程标记为已完成的课程时,最终用户将不得不更新表EmployeeCourseStatus

如何计算Status列,以便根据员工完成ModuleContent表中分配给该模块的所有课程的时间将其标记为完成。

我会使用ALTER表添加列并将三个表连接起来吗?

1 个答案:

答案 0 :(得分:0)

您应该在计算列中使用一个函数,并记住将主键传递给函数([ModuleID][CourseID][ModuleID]

  

我是否将使用ALTER表添加列并加入   三个桌子?

您可以在函数中执行此操作