【发布时间】:2019-07-26 09:21:56
【问题描述】:
DECLARE @sqlString nvarchar(500); SET @sqlString = ';WITH Data_CTE
AS
(
SELECT pj.ProjectID, pj.ProjectName, pj.ProjectOwner, cs.CustomerName
FROM Projects as pj
LEFT OUTER JOIN [Customers] cs
ON pj.CustomerId = cs.CustomerID
WHERE pj.ProjectOwner = @ename
AND (pj.ProjectStatus = 1 OR pj.ProjectStatus = 0)
)
SELECT *, (SELECT COUNT(*) FROM Data_CTE) AS TotalRows
FROM Data_CTE
ORDER BY ProjectName
OFFSET 0 * 10 ROWS
FETCH NEXT 10 ROWS ONLY;'
SET @ParmDefinition = N'@ename varchar(100)';
SET @ename = 'mohapam@test.com';
EXECUTE SP_EXECUTESQL @sqlString, @ParmDefinition, @ename = @ename;
在这里,我试图根据分页获取记录数,并获得计数总数。当我执行上述查询时,它在语法 'COU 处显示错误。
请建议任何其他方式来获取总计数的记录。
【问题讨论】:
-
你的
@sqlString声明在哪里?它应该是NVARCHAR(MAX),但错误消息强烈表明它正在被切断。 -
你为什么要使用
sp_executesql?您已标记动态 SQL,但该语句不是动态的。 -
@JeroenMostert, sqlString 是 NVARCHAR(500);
-
@Larnu,我正在使用 sp_executesql 来提高性能。
-
水晶球做得很好@JeroenMostert :) Manas,如果您使用
PRINT @sqlString;,请注意该值已被截断。sp_executesql的第一个参数是nvarchar(MAX)。但是,正如所讨论的,它甚至不需要sp_executesql。
标签: sql-server common-table-expression sp-executesql