以下のSQLストアドプロシージャがあります。
ALTER PROCEDURE [dbo].[sp_getpaginatedusersbyglobalfilter]
@globalFilter varchar(max)
, @pageSize int
, @page int
, @totalRecords int output
, @totalFilteredRecords int output
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
;WITH PaginatedUsers AS(
SELECT ROW_NUMBER() OVER(ORDER BY u.LastName) ID
, u.Username
, u.FirstName
, u.OtherNames
, u.LastName
, e.Nombre
, r.RoleName
, u.PhoneNumber
FROM webpages_Users u
INNER JOIN Establecimiento e
ON u.FacilityId = e.IDReporte
AND e.EstadoRegistro = 1
INNER JOIN webpages_UsersInRoles ur
ON u.UserId = ur.UserId
INNER JOIN webpages_Roles r
ON ur.RoleId = r.RoleId
WHERE u.Username LIKE '%' + @globalFilter + '%'
OR u.FirstName LIKE '%' + @globalFilter + '%'
OR u.OtherNames LIKE '%' + @globalFilter + '%'
OR u.LastName LIKE '%' + @globalFilter + '%'
OR e.Nombre LIKE '%' + @globalFilter + '%'
OR r.RoleName LIKE '%' + @globalFilter + '%'
OR u.PhoneNumber LIKE '%' + @globalFilter + '%'
)
SELECT pu.ID, pu.Username
, pu.FirstName
, pu.OtherNames
, pu.LastName
, pu.Nombre AS FacilityName
, pu.RoleName
, pu.PhoneNumber
FROM PaginatedUsers pu
WHERE pu.ID BETWEEN ((@page - 1) * @pageSize + 1)
AND @page * @pageSize
SELECT @totalFilteredRecords = COUNT(pu.ID)
FROM PaginatedUsers pu
SELECT @totalRecords = COUNT(u.UserId)
FROM webpages_Users u
END
私が抱えている問題は、次のセクションにあります。
SELECT @totalFilteredRecords = COUNT(pu.ID)
FROM PaginatedUsers pu
私が得るエラーは「無効なオブジェクト名'PaginatedUsers'」です。私の調査によると、PaginatedUsers(WITHの結果)オブジェクトをクエリで複数回使用することはできません。次に、出力変数@totalFilteredRecordsのレコードの総数を返すにはどうすればよいですか?結果を時間テーブルに挿入し、それからカウントと最終結果セットを取得することを考えていましたが、そのアイデアは好きではありません。私に何ができる?
ありがとう。