ALTERPROCEDURE dbo.aspnet_Membership_FindUsersByEmail @ApplicationNameNVARCHAR(256), @EmailToMatchNVARCHAR(256), @PageIndexINT, @PageSizeINT AS BEGIN DECLARE@ApplicationIdUNIQUEIDENTIFIER SELECT@ApplicationId=NULL SELECT@ApplicationId= ApplicationId FROM dbo.aspnet_Applications WHERELOWER(@ApplicationName) = LoweredApplicationName IF (@ApplicationIdISNULL) RETURN0 -- Set the page bounds DECLARE@PageLowerBoundINT---开始显示的记录 DECLARE@PageUpperBoundINT---结束显示的记录(用下面的算就知道了) DECLARE@TotalRecordsINT---总记录数 SET@PageLowerBound=@PageSize*@PageIndex SET@PageUpperBound=@PageSize-1+@PageLowerBound -- Create a temp table TO store the select results --创建一个临时表存储查询出的结果 CREATETABLE #PageIndexForUsers ( IndexId intIDENTITY (0, 1) NOTNULL, UserId UNIQUEIDENTIFIER ) -- Insert into our temp table --为临时表插数据 IF( @EmailToMatchISNULL ) INSERTINTO #PageIndexForUsers (UserId) SELECT u.UserId FROM dbo.aspnet_Users u, dbo.aspnet_Membership m WHERE u.ApplicationId =@ApplicationIdAND m.UserId = u.UserId AND m.Email ISNULL ORDERBY m.LoweredEmail --如果邮件地址为空,则选出所有用户放如临时表 ELSE INSERTINTO #PageIndexForUsers (UserId) SELECT u.UserId FROM dbo.aspnet_Users u, dbo.aspnet_Membership m WHERE u.ApplicationId =@ApplicationIdAND m.UserId = u.UserId AND m.LoweredEmail LIKELOWER(@EmailToMatch) ORDERBY m.LoweredEmail --如果不为空,则查询具有相似地址的用户放入临时表 SELECT u.UserName, m.Email, m.PasswordQuestion, m.Comment, m.IsApproved, m.CreateDate, m.LastLoginDate, u.LastActivityDate, m.LastPasswordChangedDate, u.UserId, m.IsLockedOut, m.LastLockoutDate FROM dbo.aspnet_Membership m, dbo.aspnet_Users u, #PageIndexForUsers p WHERE u.UserId = p.UserId AND u.UserId = m.UserId AND p.IndexId >=@PageLowerBoundAND p.IndexId <=@PageUpperBound ORDERBY m.LoweredEmail /**//*三表连接通过USERID,临时表的自动增长列主要用来控制显示数的.这个好象用于分页. 若不考虑分页,可不用临时表.*/ SELECT@TotalRecords=COUNT(*) --查询总记录数 FROM #PageIndexForUsers RETURN@TotalRecords END