# "ListProjectsWithMembership" 存储过程

说明：

这个过程根据用户发出的RoleID 来显示一连串的项目信息，如果RoleID 等于3（即是顾客）的话，这个过程将只显示他所从事的项目信息，如果RoleID 等于2（即是项目经理）的话，那么这个过程将显示出他所管理的所有项目信息。

最后，如果RoleID等于1（即是管理员）的话，那么这个过程将显示所有的项目信息。

定义：

    	CREATE   PROCEDURE TT_ListProjectsWithMembership
    	(
    		@QueryUserID int,
    		@UserID int
    	)
    	AS

    	DECLARE @@QueryUserRoleID int
    	SELECT @@QueryUserRoleID = TT_Users.RoleID FROM TT_Users WHERE TT_Users.UserID = @QueryUserID

    	IF @@QueryUserRoleID = 2
    	BEGIN
    		SELECT 	TT_Projects.ProjectID,
    			Name,
    			Description,
    			ManagerUserID,
    			EstCompletionDate,
    			EstDuration
    		FROM TT_Projects
    		INNER JOIN TT_ProjectMembers ON TT_ProjectMembers.ProjectID = TT_Projects.ProjectID
    		WHERE UserID = @UserID AND ManagerUserID = @QueryUserID
    	END
    	IF @@QueryUserRoleID = 1 OR @QueryUserID = @UserID
    	BEGIN
    		SELECT 	TT_Projects.ProjectID,
    			Name,
    			Description,
    			ManagerUserID,
    			EstCompletionDate,
    			EstDuration
    		FROM TT_Projects
    		INNER JOIN TT_ProjectMembers ON TT_ProjectMembers.ProjectID = TT_Projects.ProjectID
    		WHERE UserID = @UserID
    	END

用到的数据库表：

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

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

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