资源描述
人事管理系统项目详细设计说明书
296
2020年6月23日
资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。
目录
1. 概述 7
1.1. 目的 7
1.2. 内容 7
1.3. 与其它项目的关联 7
2. 数据库 7
2.1. 数据库名称 7
2.2. 用户 8
3. 表 8
3.1. 表设计概述 8
3.2. 表tblEmployee 9
3.3. 表tblDepartment 11
3.4. 表tblSalary 11
3.5. 表tblAttendance 12
3.6. 表tblLeave 14
3.7. 表tblOvertime 15
3.8. 表tblPerformance 16
3.9. 表tblConfig 17
3.10. 表tblSystemEvent 18
3.11. 表tblPerformStatus 19
3.12. 表tblOvertimeType 20
3.13. 表tblHoliday 21
3.14. 表tblPerformItem 22
4. 视图 24
4.1. 视图viwwebEmpCommonInfo 24
4.2. 视图viwwebAllAttend 25
4.3. 视图viwwebAllLeaveReg 25
4.4. 视图viwwebAllOTReg 26
4.5. 视图viwwebCompanyPolicy 27
4.6. 视图viwwebDepartment 28
4.7. 视图viwwebHoliday 28
4.8. 视图viwwebManagerInfo 29
4.9. 视图viwwebSubmittedLvReg 29
4.10. 视图viwwebSubmittedOTReg 30
4.11. 视图viwwebHistorySalary 31
4.12. 视图viwwebPerformance 32
4.13. 视图viwwebPerformItem 33
4.14. 视图viwwinEmployeeList 33
4.15. 视图viwwinAttendance 34
4.16. 视图viwwinLeaveList 35
4.17. 视图viwwinOTList 35
4.18. 视图viwwinEmpBasicSalary 36
5. 存储过程 37
5.1. 存储过程spwebAddLeaveReq 37
5.2. 存储过程spwebAddOTReq 37
5.3. 存储过程spwebAskReview 38
5.4. 存储过程spwebCancelLeaveReq 39
5.5. 存储过程spwebCancelOTReq 39
5.6. 存储过程spwebChangeLeaveStatus 40
5.7. 存储过程spwebChangeOTStatus 41
5.8. 存储过程spwebGetCEOInfo 41
5.9. 存储过程spwebGetDeptAttendSummary 42
5.10. 存储过程spwebGetDeptLvSummary 42
5.11. 存储过程spwebGetDeptOTSummary 43
5.12. 存储过程spwebGetEmployeeID 44
5.13. 存储过程spwebGetEmpPassword 44
5.14. 存储过程spwebGetEmpPasswordByID 45
5.15. 存储过程spwebUpdatePassword 46
5.16. 存储过程spwebUpdateSelfIntro 46
5.17. 存储过程spwebAddPerformObject 47
5.18. 存储过程spwebDeletePerformItem 48
5.19. 存储过程spwebGetDeptSalarySummary 48
5.20. 存储过程spwebUpdatePerform 49
5.21. 存储过程spwebUpdatePerformItem 49
5.22. 存储过程spwinAttendanceQuery 50
5.23. 存储过程spwinChangeEmployeeDept 51
5.24. 存储过程spwinCreateDepartment 51
5.25. 存储过程spwinDeleteDepartment 52
5.26. 存储过程spwinDeleteEmployee 52
5.27. 存储过程spwinDelLeaveRequest 53
5.28. 存储过程spwinDeptAllEmployee 54
5.29. 存储过程spwinDeptLeave 54
5.30. 存储过程spwinEmpLeave 55
5.31. 存储过程spwinGetAllDepartment 55
5.32. 存储过程spwinGetEmpbyDeptName 56
5.33. 存储过程spwinMoveEmpBetweenDept 56
5.34. 存储过程spwinRejectLeaveRequest 57
5.35. 存储过程spwebUpdatePerformItemSelf 58
5.36. 存储过程spwebUpdatePerformItemReview 58
5.37. 存储过程spwebGetSubmittedPerform 59
5.38. 存储过程spwebGetDeptPerformSummary 59
5.39. 存储过程spwinOTbyGroup 60
5.40. 存储过程spwebPerformReviewed 61
5.41. 存储过程spwinBasicSalaryByEmpID 61
5.42. 存储过程spwinSalaryHistoryByEmpID 62
5.43. 存储过程spwinSetBasicSalary 62
5.44. 存储过程spwinQueryEventbyTime 63
5.45. 存储过程spwinChangePassword 64
5.46. 存储过程spwinAddEvent 64
5.47. 存储过程spwebUpdatePerformItemObj 65
6. 用户自定义函数 65
6.1. 用户自定义函数udfwinDeptAllEmployee 65
6.2. 用户自定义函数udfwinGetDeptIDbyDeptName 66
6.3. 用户自定义函数udfwinGetDeptNamebyDeptID 66
7. 触发器 67
7.1. 触发器tRejectRequest 67
8. 数据库安全性 67
8.1. 概述 67
8.2. 数据库验证方式 67
1. 概述
1.1. 目的
本文为教学案例项目SQL Server功能规范说明书。本说明书将:
l 描述数据库设计的目的
l 说明数据库设计中的主要组成部分
l 说明数据库设计中涵盖的教学知识要点
1.2. 内容
本文档主要内容包括对数据库设计结构的总体描述, 对数据库中各种对象的描述( 包括对象的名称、 对象的属性、 对象和其它对象的直接关系) 。本文档中包含对以下数据库内容的描述:
l 数据表
l 视图
l 存储过程
l 用户自定义函数
l 触发器
l 约束
在数据库主要对象之外, 本文还将描述数据库安全性设置、 数据库属性设置和数据库备份策略, 为数据库管理员维护数据库安全稳定地运行提供参考。
1.3. 与其它项目的关联
教学案例项目的数据库设计与教学项目( Web部分和Windows部分) 功能密切相关。教学案例项目的数据库将按照教学项目程序部分的功能需求而设计, 数据库设计将配合教学案例的程序部分, 以实现一个功能完备的企业环境内的应用。
提示 可经过使用 Web 应用程序或 Windows 应用程序来测试数据库。
2. 数据库
2.1. 数据库名称
数据库的名称一定要设为 RGB, 否则本案例设计的 Web 部分的应用程序和 Windows 部分的应用程序将无法使用该数据库。
答案: USE [master]
GO
/****** Object: Database [RGB] Script Date: 06/18/ 08:55:58 ******/
CREATE DATABASE [RGB] ON PRIMARY
( NAME = N'RGB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\RGB.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'RGB_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\RGB_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
ALTER DATABASE [RGB] SET COMPATIBILITY_LEVEL = 100
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [RGB].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [RGB] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [RGB] SET ANSI_NULLS OFF
GO
ALTER DATABASE [RGB] SET ANSI_PADDING OFF
GO
ALTER DATABASE [RGB] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [RGB] SET ARITHABORT OFF
GO
ALTER DATABASE [RGB] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [RGB] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [RGB] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [RGB] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [RGB] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [RGB] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [RGB] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [RGB] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [RGB] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [RGB] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [RGB] SET DISABLE_BROKER
GO
ALTER DATABASE [RGB] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [RGB] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [RGB] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [RGB] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [RGB] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [RGB] SET READ_COMMITTED_SNAPSHOT OFF
GO
ALTER DATABASE [RGB] SET HONOR_BROKER_PRIORITY OFF
GO
ALTER DATABASE [RGB] SET READ_WRITE
GO
ALTER DATABASE [RGB] SET RECOVERY FULL
GO
ALTER DATABASE [RGB] SET MULTI_USER
GO
ALTER DATABASE [RGB] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [RGB] SET DB_CHAINING OFF
GO
2.2. 用户
除了数据库中自动创立的 dbo 用户之外, 还要创立如下两个用户:
RGBWinUser: 该用户是 Windows 应用程序访问数据库所使用的账号, 它的权限一般仅限于查看视图和执行存储过程。
RGBASPUser: 该用户是 Web 应用程序访问数据库所使用的账号, 它的权限和 RGBWinUser 用户类似, 即仅限于查看视图和执行存储过程。
答案: 1.USE [RGB]
GO
/****** Object: User [RGBWinUser] Script Date: 06/18/ 08:29:15 ******/
GO
CREATE USER [RGBWinUser] FOR LOGIN [WO] WITH DEFAULT_SCHEMA=[dbo]
GO
2. USE [RGB]
GO
/****** Object: User [RGBASPUser] Script Date: 06/18/ 08:30:46 ******/
GO
CREATE USER [RGBASPUser] FOR LOGIN [ni] WITH DEFAULT_SCHEMA=[dbo]
GO
3. 表
3.1. 表设计概述
根据教学案例功能, 数据库将以员工信息为中心存储相关数据, 配合 SQL Server 数据库系统中提供的数据管理, 实现员工考勤、 请假、 加班管理及系统设置等业务功能。
数据库设计将以存储员工信息的员工表为基础, 连接多张相关表实现对以下关系的支持:
l 员工与请假申请
l 员工与加班申请
l 员工与考勤记录
l 员工与部门
l 员工与部门经理
l 员工与绩效考核记录
l 员工与工资
另外数据库中还将记录教学案例应用中需要的全局配置信息和事件日志记录。
数据库系统主要的实体关系如下图: ( 部门表中去掉部门经理编号, 在数据删除时可能会出现死锁)
3.2. 表tblEmployee
概述
表 tblEmployee 用于记录员工基本信息, 并作为基础表与其它表联接。该表经过DeptID和Title能够确定员工部门和职位信息。当Title的值为”经理”时能够确定此员工为该部门的部门经理。
答案: USE [RGB]
GO
/****** Object: Table [dbo].[tblEmployee] Script Date: 06/20/ 17:13:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[tblEmployee](
[EmployeeID] [int] NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[LoginName] [nvarchar](20) NOT NULL,
[Password] [binary](20) NULL,
[Email] [nvarchar](50) NOT NULL,
[DeptID] [int] NULL,
[BasicSalary] [int] NULL,
[Title] [nvarchar](50) NULL,
[Telephone] [nvarchar](50) NULL,
[OnhoardDate] [datetime] NOT NULL,
[Selfintro] [nvarchar](200) NULL,
[VacationRemain] [int] NULL,
[EmployeeLevel] [int] NULL,
[PhotoImage] [image] NULL,
CONSTRAINT [PK_tblEmployee] PRIMARY KEY CLUSTERED
(
[EmployeeID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[tblEmployee] WITH CHECK ADD CONSTRAINT [FK_tblEmployee_tblDepartment] FOREIGN KEY([DeptID])
REFERENCES [dbo].[tblDepartment] ([DeptID])
GO
ALTER TABLE [dbo].[tblEmployee] CHECK CONSTRAINT [FK_tblEmployee_tblDepartment]
GO
ALTER TABLE [dbo].[tblEmployee] WITH CHECK ADD CONSTRAINT [FK_tblEmployee_tblEmployeeLevel] FOREIGN KEY([EmployeeLevel])
REFERENCES [dbo].[tblEmployeeLevel] ([EmployeeLevel])
GO
ALTER TABLE [dbo].[tblEmployee] CHECK CONSTRAINT [FK_tblEmployee_tblEmployeeLevel]
GO
表定义
表 tblEmployee 定义如下:
名称
类型
可否为空
说明
备注
EmployeeID
int 4
否
员工编号
自动生成
Name
nvarchar 50
否
员工姓名
LoginName
nvarchar 20
否
员工登录名
建议为英文字符, 且与姓名不同
Password
binary 20
可
员工登录密码
Email
nvarchar 50
否
员工电子邮件
DeptID
int 4
可
员工所属部门编号
BasicSalary
int 4
可
员工基本工资
Title
nvarchar 50
可
员工职位名称
可取值为”普通员工”、 ”部门经理”、 ”总裁”
Telephone
nvarchar 50
可
员工电话
OnboardDate
datetime 8
否
员工报到日期
SelfIntro
nvarchar 200
可
员工自我介绍
初始为空, 由员工自行输入
VacationRemain
int 4
可
员工剩余假期
小时数
EmployeeLevel
int 4
可
员工的级别
PhotoImage
image 16
可
员工照片
主键
表 tblEmployee 的主键是EmployeeID 字段, 类型为 int, 设置自动增量。
答案: USE [RGB]
GO
/****** Object: Index [PK_tblEmployee] Script Date: 06/18/ 09:00:53 ******/
ALTER TABLE [dbo].[tblEmployee] ADD CONSTRAINT [PK_tblEmployee] PRIMARY KEY CLUSTERED
(
[EmployeeID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
外键
表 tblEmployee 的外键有DeptID, 类型为int, 用于与表 tblDepartment 中的 DeptID 字段关联。DeptID 字段能够为空, 在此情况下表示员工不在任何部门中。
表 tblEmployee 的外键有EmployeeLevel, 类型为int, 用于与表tblEmployeeLevel中的EmployeeLevel字段关联。
1. USE [RGB]
GO
ALTER TABLE [dbo].[tblEmployee] WITH CHECK ADD CONSTRAINT [FK_tblEmployee_tblDepartment] FOREIGN KEY([DeptID])
REFERENCES [dbo].[tblDepartment] ([DeptID])
GO
ALTER TABLE [dbo].[tblEmployee] CHECK CONSTRAINT [FK_tblEmployee_tblDepartment]
GO
2. USE [RGB]
GO
ALTER TABLE [dbo].[tblEmployee] WITH CHECK ADD CONSTRAINT [FK_tblEmployee_tblEmployeeLevel] FOREIGN KEY([EmployeeLevel])
REFERENCES [dbo].[tblEmployeeLevel] ([EmployeeLevel])
GO
ALTER TABLE [dbo].[tblEmployee] CHECK CONSTRAINT [FK_tblEmployee_tblEmployeeLevel]
GO
约束
表 tblEmployee 中的 LoginName 字段建议为4-8位小写英文字符, 且不能与员工姓名相同也不能够为空字符串。
索引
主键字段EmployeeID 具有自动创立的聚集索引。
3.3. 表tblDepartment
概述
表tblDepartment用于记录企业内部的部门信息。每个独立的部门在该表中都对应一条记录。该表经过与 tblEmployee 表关联能够确定员工所属的部门。
答案: USE [RGB]
GO
/****** Object: Table [dbo].[tblDepartment] Script Date: 06/20/ 17:13:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[tblDepartment](
[DeptID] [int] NOT NULL,
[DeptName] [char](10) NULL,
[Description] [char](50) NULL,
CONSTRAINT [PK_tblDepartment] PRIMARY KEY CLUSTERED
(
[DeptID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
表定义
表tblDepartment定义如下:
名称
类型
可否为空
说明
备注
DeptID
int 4
否
部门编号
自动生成
DeptName
char 10
可
部门名称
Desciption
char 50
可
部门描述
主键
表tblDepartment的主键是DeptID 字段, 类型为 int, 设置自动增量。
答案: USE [RGB]
GO
/****** Object: Index [PK_tblDepartment] Script Date: 06/18/ 09:03:12 ******/
ALTER TABLE [dbo].[tblDepartment] ADD CONSTRAINT [PK_tblDepartment] PRIMARY KEY CLUSTERED
(
[DeptID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
外键
无
约束
无其它约束
索引
主键字段DeptID具有自动创立的聚集索引。
3.4. 表tblSalary
概述
表tblSalary用于记录员工每月的工资信息, 包括工资发放日期、 工资组成等。表 tblSalary 经过字段 EmployeeID 与表tblEmployee 关联。
答案: USE [RGB]
GO
/****** Object: Table [dbo].[tblSalary] Script Date: 06/20/ 17:12:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tblSalary](
[SalaryID] [int] NOT NULL,
[EmployeeID] [int] NOT NULL,
[SalaryTime] [datetime] NOT NULL,
[BasicLSalary] [int] NULL,
[OvertimeSalary] [int] NULL,
[AbsenseSalary] [int] NULL,
[OtherSalary] [int] NULL,
CONSTRAINT [PK_tblSalary] PRIMARY KEY CLUSTERED
(
[SalaryID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[tblSalary] WITH CHECK ADD CONSTRAINT [FK_tblSalary_tblEmployee] FOREIGN KEY([EmployeeID])
REFERENCES [dbo].[tblEmployee] ([EmployeeID])
GO
ALTER TABLE [dbo].[tblSalary] CHECK CONSTRAINT [FK_tblSalary_tblEmployee]
GO
表定义
表tblSalary定义如下:
名称
类型
可否为空
说明
备注
SalaryID
int 4
否
工资编号
EmployeeID
int 4
否
员工编号
SalaryTime
datetime 8
否
工资发放时间
BasicSalary
int 4
可
员工基本工资
OvertimeSalary
int 4
可
加班工资
AbsenseSalary
int 4
可
缺勤扣除
OtherSalary
int 4
可
其它工资
主键
表tblSalary的主键是SalaryID字段, 类型为 int, 设置自动增量。
答案: USE [RGB]
GO
/****** Object: Index [PK_tblSalary] Script Date: 06/18/ 09:03:47 ******/
ALTER TABLE [dbo].[tblSalary] ADD CONSTRAINT [PK_tblSalary] PRIMARY KEY CLUSTERED
(
[SalaryID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
外键
表tblSalary的外键是EmployeeID, 类型为int, 用于与表tblEmployee中的EmployeeID字段关联。
答案: USE [RGB]
GO
ALTER TABLE [dbo].[tblSalary] WITH CHECK ADD CONSTRAINT [FK_tblSalary_tblEmployee] FOREIGN KEY([EmployeeID])
REFERENCES [dbo].[tblEmployee] ([EmployeeID])
GO
ALTER TABLE [dbo].[tblSalary] CHECK CONSTRAINT [FK_tblSalary_tblEmployee]
GO
约束
无其它约束
索引
主键字段SalaryID具有自动创立的聚集索引。
3.5. 表tblAttendance
概述
表tblAttendance用于记录员工的考勤信息( 上下班时间、 记录者信息等) , 经过字段 EmployeeID 与表tblEmployee 关联。
答案: USE [RGB]
GO
/****** Object: Table [dbo].[tblAttendance] Script Date: 06/20/ 17:11:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tblAttendance](
[AttendID] [int] NOT NULL,
[EmployeeID] [int] NOT NULL,
[BreachTime] [datetime] NULL,
[RecorderID] [int] NULL,
[Type] [nchar](4) NOT NULL,
[AskReview] [tinyint] NULL,
[Date] [datetime] NOT NULL,
CONSTRAINT [PK_tblAttendance] PRIMARY KEY CLUSTERED
(
[AttendID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[tblAttendance] WITH CHECK ADD CONSTRAINT [FK_tblAttendance_tblEmployee] FOREIGN KEY([EmployeeID])
REFERENCES [dbo].[tblEmployee] ([EmployeeID])
GO
ALTER TABLE [dbo].[tblAttendance] CHECK CONSTRAINT [FK_tblAttendance_tblEmployee]
GO
ALTER TABLE [dbo].[tblAttendance] WITH CHECK ADD CONSTRAINT [FK_tblAttendance_tblEmployee2] FOREIGN KEY([RecorderID])
REFERENCES [dbo].[tblEmployee] ([EmployeeID])
GO
ALTER TABLE [dbo].[tblAttendance] CHECK CONSTRAINT [FK_tblAttendance_tblEmployee2]
GO
ALTER TABLE [dbo].[tblAttendance] WITH CHECK ADD CONSTRAINT [CK_tblAttendance] CHECK (([RecorderID]<>[EmployeeID] AND ([Type]='缺勤' OR [Type]='迟到’' OR [Type]='早退')))
GO
ALTER TABLE [dbo].[tblAttendance] CHECK CONSTRAINT [CK_tblAttendance]
GO
展开阅读全文