我正在使用下面的CTE ...但我得到的错误就像
没有为'TempResult'的第1列指定列名.
另外在这里我@Query从另一个存储过程传递,在这个过程中我需要@Query在CTE中执行它TempResult.
CREATE PROCEDURE [dbo].[SelectAllProjectPaging]
@CurrentPage int,
@RecordsPerPage int,
@Column varchar(50),
@Query nvarchar(max)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @query nvarchar(max)
SET @query = 'ROW_NUMBER() OVER(ORDER BY ProjectList.ProjectId DESC) as RowNumber,' + @Query
-- Insert statements for procedure here
DECLARE @FirstRecord int, @LastRecord int
SELECT @FirstRecord = (@CurrentPage - 1) * @RecordsPerPage
SELECT @LastRecord = (@CurrentPage * @RecordsPerPage + 1);
WITH TempResult as
(
Select @query
)
SELECT TOP (@LastRecord - 1) *
FROM TempResult
WHERE RowNumber > @FirstRecord
AND RowNumber < @LastRecord;
SELECT COUNT(*) as count
FROM ProjectList
End
Run Code Online (Sandbox Code Playgroud)
您需要使用动态sql进行整个查询.这样的事情:
SET @query= 'WITH TempResult as
(
SELECT + ' + @query +
')
SELECT TOP (' + CAST((@LastRecord - 1) AS VARCHAR(20)) +
') * FROM TempResult
WHERE RowNumber > ' + CAST(@FirstRecord AS VARCHAR(20)) +
' AND RowNumber < ' + CAST(@LastRecord AS VARCHAR(20)) + '; '
EXECUTE @query
Run Code Online (Sandbox Code Playgroud)
编辑
评论.是的它应该选择我能看到的东西.该@queryIS等于:
set @query = 'ROW_NUMBER() OVER(ORDER BY ProjectList.ProjectId DESC) as RowNumber,'+ @query
Run Code Online (Sandbox Code Playgroud)
然后你需要:
SELECT ' ROW_NUMBER() OVER(ORDER BY ProjectList.ProjectId DESC) as RowNumber,' + @query
Run Code Online (Sandbox Code Playgroud)