【发布时间】:2017-05-10 05:58:26
【问题描述】:
我编写了一个存储过程来搜索我的数据库中的用户。但有时它返回的用户太多,而且耗时太长。
所以如果结果集有超过 500 行,我决定只返回前 500 行。但我不知道如何从存储过程中获取计数。
请帮助我。
我的原始存储过程如下。谢谢
ALTER PROCEDURE [dbo].[up_Select_SearchUser]
@companyCode varchar(50)
, @keyword nvarchar(20)
, @isRelative bit
, @langCode varchar(10)
AS
BEGIN
SET NOCOUNT ON;
SELECT
LOWER(M.UserID) AS EmpID,
LOWER(M.EmpID) AS REmpID,
dbo.uf_CompanyPhone(M.CompanyPhone, M.ExtensionNumber) AS ExtensionNumber,
M.CellPhone,
dbo.uf_TeamManagerYN(M.UserID) AS TeamChiefYN,
ISNULL(M.DisplayName, '') AS DisplayName,
ISNULL(M.DisplayName_Eng, '') AS DisplayName_Eng,
M.EMail,
M.MainDeptCode AS DeptCode,
ISNULL(DT.DisplayName, '') AS DeptName,
ISNULL(CL.CompanyCode, '') AS CompanyCode,
ISNULL(CL.CompanyName, '') AS CompanyName,
ISNULL(R.RankCode, '') AS RankCode,
ISNULL(R.RankName, '') AS RankName,
ISNULL(J.JobCode, '') AS JobCode,
ISNULL(J.JobName, '') AS JobName,
ISNULL(D.DutyCode, '') AS DutyCode,
ISNULL(D.DutyName, '') AS DutyName,
ISNULL(M.FaxNumber, '') AS FaxNumber,
ISNULL(M.ADDisplayName, '') AS ADDisplayName,
'' AS Address,
ISNULL(M.CompanyPhone, '') AS CompanyPhone,
ISNULL(R.SortOrder, '') AS RankOrder
FROM
dbo.tb_User M WITH (NOLOCK)
INNER JOIN
dbo.tb_Dept DT WITH (NOLOCK) ON M.MainDeptCode = DT.DeptCode
INNER JOIN
dbo.tb_Rank R WITH (NOLOCK) ON M.RankCode = R.RankCode
AND M.GroupCode = R.GroupCode
AND M.DetailCode = R.DetailCode
AND M.CompanyCode = R.CompanyCode
INNER JOIN
dbo.tb_Company CL WITH (NOLOCK) ON M.CompanyCode = CL.CompanyCode
LEFT OUTER JOIN
dbo.tb_Duty D WITH (NOLOCK) ON M.DutyCode = D.DutyCode
AND M.GroupCode = D.GroupCode
AND M.DetailCode = D.DetailCode
AND M.CompanyCode = D.CompanyCode
LEFT OUTER JOIN
dbo.tb_Job J WITH (NOLOCK) ON M.JobCode = J.JobCode
WHERE
(M.DisplayName LIKE '%' + @keyword + '%'
OR M.UserID LIKE '%' + @keyword + '%')
AND M.DisplayYN = 'Y'
AND M.CompanyCode LIKE @companyCode
ORDER BY
RankOrder, JobCode, DisplayName
END
【问题讨论】:
-
肯定有成千上万个这样的例子......请尝试搜索。另外:模式、索引、S-argable
-
使用
SELECT TOP 500 -
如果您正在挖掘重复记录,您应该查看您的联接。
-
为什么不尝试使用 OFFSET / FETCH 进行分页,我们可以每页显示 100 行或更多行
-
是的,深入你的加入,找出为什么你会得到很多记录。分页,只有你正在寻找的分页。
标签: sql sql-server stored-procedures count