这个存储过程在MS SQL Server2000里合理不?有错误没?

来源:百度知道 编辑:UC知道 时间:2024/05/21 12:23:48
CREATE PROCEDURE [dbo].[proc_GetDataInPage]
(
@tblName nvarchar(250), ----要显示的表或多个表的连接
@fldName nvarchar(250) = '*', ---输出字段
@pageSize int = 10, ----每页显示的记录个数
@page int = 1, ----要显示那一页的记录
@fldSort nvarchar(250) = null, ----排序字段列表
@strCondition nvarchar(250), ----条件字段
@recordCount bigint output
)
AS
SET NOCOUNT ON
Declare @strSql nvarchar(250)

if @strCondition is null or @strCondition=''
set @strCondition=''
else
set @strCondition=' Where ' + @strCondition

if @page=1
begin
set @strSql='Select Top '+ CAST(@pageSize as VARCHAR(4)) +' '+ @fldName+ ' From '+@tblName +''+ @strCondition +' order by ' +@fldSort
end
else
begin
set @strSql='SELECT * FROM (SELECT '+@fldName +' ,ROW_NUMBER() OVER(ORDER BY ' + @fldSort +') AS rownum FROM '+ @tbl

不合理,至少OVER子句在2000里是没有的。

不行.
SQL2000不支持ROW_NUMBER()

用这个

/*--用存储过程实现的分页程序

显示指定表、视图、查询结果的第X页
对于表中主键或标识列的情况,直接从原表取数查询,其它情况使用临时表的方法
如果视图或查询结果中有主键,不推荐此方法

--邹建 2003.09(引用请保留此信息)--*/

/*--调用示例
exec p_show '地区资料'

exec p_show '地区资料',5,3,'地区编号,地区名称,助记码','地区编号'
--*/

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_show]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_show]
GO

CREATE Proc p_show
@QueryStr nvarchar(4000), --表名、视图名、查询语句
@PageSize int=10, --每页的大小(行数)
@PageCurrent int=1, --要显示的页
@FdShow nvarchar (4000)='', --要显示的字段列表,如果查询结果有标识字段,需要指定此值,且不包含标识字段
@FdOrder nvarchar (1000)='' --排序字段列表
as
declare @FdName nvarchar(250) --表中的主键或表、临时表中的标识列名
,@Id1 varchar(20),@Id2 varchar(20) --开始和结束的记录号
,@Obj_ID int