# "ListUsers" 存储过程

说明：

这个过程根据用户发出的RoleID 来显示用户的名字、id和任务等信息，如果RoleID 等于3（即是顾客）的话，这个过程将只显示他自己的用户信息，如果RoleID 等于2（即是项目经理）的话，那么这个过程将显示出他所管理的所有员工信息。最后，如果RoleID等于1（即是管理员）的话，那么这个过程将显示所有用户的信息。

定义：

    	CREATE PROCEDURE TT_ListUsers
    	(
    		@UserID int,
    		@RoleID int
    	)
    	AS

    	IF @RoleID = 1
    		BEGIN
    		SELECT
    			UserID,
    			UserName,
    			TT_Users.RoleID,
    			TT_Roles.Name 'RoleName'
    		FROM
    			TT_Users INNER JOIN TT_Roles ON TT_Users.RoleID = TT_Roles.RoleID
    		END
    	ELSE IF @RoleID = 2
    		BEGIN
    		SELECT DISTINCT
    			TT_Users.UserID,
    			TT_Users.UserName,
    			TT_Users.RoleID,
    			TT_Roles.Name 'RoleName'
    		FROM TT_Users
    		INNER JOIN TT_ProjectMembers ON TT_Users.UserID=TT_ProjectMembers.UserID
    		INNER JOIN TT_Projects ON TT_ProjectMembers.ProjectID=TT_Projects.ProjectID
    		INNER JOIN TT_Roles ON TT_Users.RoleID = TT_Roles.RoleID
    		WHERE	@UserID = TT_Projects.ManagerUserID OR @UserID = TT_Users.UserID

    		END
    	ELSE
    		SELECT
    			UserID,
    			UserName,
    			TT_Users.RoleID,
    			TT_Roles.Name 'RoleName'
    		FROM
    			TT_Users INNER JOIN TT_Roles ON TT_Users.RoleID = TT_Roles.RoleID
    		WHERE UserID = @UserID

用到的数据库表：

Projects表的主键是ProjectID字段，它的表结构如下图所示：

ProjectMembers表的主键是一个复合的主键，它由ProjectID字段和UserID字段共同组成。这个表描述的是用户在项目中的所具有的成员资格等。用户只需要输入他们成为项目成员的开始时间。

ProjectMembers表通过ProjectID字段和Projects表进行外部关联，另外它还通过UserID字段和Users表进行外部关联，它的表结构如下图所示：

Users表的主键是UserID字段，它的表结构如下图所示：

Roles表的主键是RoleID字段，它的表结构如下图所示：