【小问题】关于利用俄罗斯存储过程进行数据分页
存储过程如下:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
ALTER PROC GetPage
@PageSize int, --每页记录数
@PageIndex int, -- 当前返回页(从1起)
@TableName varchar(50), --数据表名称
@RowFiler varchar(500), --查询字句,WHERE后面的部分
@SortExp varchar(500) --排序字句,ORDER BY后面的部分
AS
SET NOCOUNT ON
BEGIN
DECLARE @IndexTable TABLE(id int IDENTITY(1,1),nid int) --表变量
DECLARE @PageLowerBound int --当前页最前记录
DECLARE @PageUpperBound int --当前页最末记录
SET @PageLowerBound = (@PageIndex - 1) * @PageSize
SET @PageUpperBound = @PageLowerBound + @PageSize
SET ROWCOUNT @PageUpperBound
EXEC ('INSERT INTO @IndexTable(nid) SELECT ID FROM ' + @TableName + ' WHERE ' + @RowFiler + ' ORDER BY ' + @SortExp)
EXEC ('SELECT O.* FROM ' + @TableName + ' O,@IndexTable t WHERE O.ID = t.nid AND t.id > @PageLowerBound AND t.id <= @PageUpperBound ORDER BY t.id')
END
SET NOCOUNT OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
运行时报以下错误
服务器: 消息 137,级别 15,状态 2,行 1
必须声明变量 '@IndexTable'。
服务器: 消息 137,级别 15,状态 1,行 1
必须声明变量 '@IndexTable'。
存储过程: HangBiao.dbo.GetPage
返回代码 = 0
请各位帮忙看看,谢谢
------解决方案--------------------SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
ALTER PROC GetPage
@PageSize int, --每页记录数
@PageIndex int, -- 当前返回页(从1起)
@TableName varchar(50), --数据表名称
@RowFiler varchar(500), --查询字句,WHERE后面的部分
@SortExp varchar(500) --排序字句,ORDER BY后面的部分
AS
SET NOCOUNT ON
BEGIN
--DECLARE @IndexTable TABLE(id int IDENTITY(1,1),nid int) --表变量
DECLARE @PageLowerBound int --当前页最前记录
DECLARE @PageUpperBound int --当前页最末记录
SET @PageLowerBound = (@PageIndex - 1) * @PageSize
SET @PageUpperBound = @PageLowerBound + @PageSize
SET ROWCOUNT @PageUpperBound
EXEC('DECLARE @IndexTable TABLE(id int IDENTITY(1,1),nid int)
INSERT INTO @IndexTable(nid) SELECT ID FROM ' + @TableName + ' WHERE ' + @RowFiler + ' ORDER BY ' + @SortExp)
SELECT O.* FROM ' + @TableName + ' O,@IndexTable t WHERE O.ID = t.nid AND t.id > @PageLowerBound AND t.id <= @PageUpperBound ORDER BY t.id ')
END
SET NOCOUNT OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
------解决方案--------------------SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
ALTER PROC GetPage
@PageSize int, --每页记录数
@PageIndex int, -- 当前返回页(从1起)
@TableName varchar(50), --数据表名称
@RowFiler varchar(500), --查询字句,WHERE后面的部分
@SortExp varchar(500) --排序字句,ORDER BY后面的部分
AS
SET NOCOUNT ON
BEGIN
--DECLARE @IndexTable TABLE(id int IDENTITY(1,1),nid int) --表变量
DECLARE @PageLowerBound int --当前页最前记录
DECLARE @PageUpperBound int --当前页最末记录
SET @PageLowerBound = (@PageIndex - 1) * @PageSize
SET @PageUpperBound = @PageLowerBound + @PageSize
SET ROWCOUNT @PageUpperBound
EXEC( 'DECLARE @IndexTable TABLE(id int IDENTITY(1,1),nid int)
INSERT INTO @IndexTable(nid) SELECT ID FROM ' + @TableName + ' WHERE ' + @RowFiler + ' ORDER BY ' + @SortExp +'
SELECT O.* FROM ' + @TableName + ' O,@IndexTable t WHERE O.ID = t.nid AND t.id > @PageLowerBound AND t.id <= @PageUpperBound ORDER BY t.id ')