asp利用存储过程分页问题,在线等高人指点。

存储过程USE[cnsbdata]GOSETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOALTERPROCEDURE[dbo].[get_... 存储过程
USE [cnsbdata]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[get_messageinfo]
@reveiveid nvarchar(10)='',
@message_type Nvarchar(10)='1',
@number Nvarchar(10) = '',
@page_no Nvarchar(10) = '',
@order Nvarchar(20) = '',
@order_type Nvarchar(4) = ''
AS
set nocount on
if @order=''
set @order='m.message_state'
if @order_type=''
set @order_type='asc'
declare @sqlfieldtext as Nvarchar(max)
declare @sqltabletext as Nvarchar(max)
declare @sqlwheretext as Nvarchar(max)
set @sqlfieldtext=' m.send_id,m.message_title,m.message_id,m.message_state,m.merchants_name '
set @sqltabletext=' from Message_Letter m '
set @sqlwheretext=' where 1=1 '
if @reveiveid<>''
set @sqlwheretext=@sqlwheretext+' and m.receive_id='+@reveiveid
set @sqlwheretext=@sqlwheretext+ ' and m.message_type='+@message_type
exec exec_sql @sqlfieldtext, @sqltabletext ,@sqlwheretext,@number,@page_no,@order,@order_type
展开
 我来答
厉哲瀚5N
2011-06-03 · TA获得超过223个赞
知道小有建树答主
回答量:180
采纳率:0%
帮助的人:121万
展开全部
你写的问题也太乱了,sqlServer存储过程的话,以前写过一个沾上去给你参考
关于SQL2005或SQL2000存储过分页程说明
首先大家都知道,mssql分页没有mysql分页方便,必须要用到拼接sql语句;

通过网上搜索我们找到关于mssql分页的sql语句

方法一:
适用sql2000或sql2005

SELECT TOP 页大小 *
FROM table1
WHERE id NOT IN
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
)
ORDER BY id

方法二:
适用sql2000或sql2005

SELECT TOP 页大小 *
FROM table1
WHERE id >
(
SELECT ISNULL(MAX(id),0)
FROM
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
) A
)
ORDER BY id

方法三:
适用sql2005

SELECT TOP 页大小 *
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1
) A
WHERE RowNumber > 页大小*(页数-1)

使用说明 : 页大小:每页的行数;页数:第几页。使用时,请把“页大小”和“页大小*(页数-1)”替换成数字。
通过上面的sql语句我们不难看出,只要把 页大小 和 页数 改为参数传递 就可也用存储过程来实现分页功能了

就拿 方法二来举列

CREATE PROC getdome
@a INT,
@b INT
as
SELECT TOP @a *
FROM table1
WHERE id >
(
SELECT ISNULL(MAX(id),0)
FROM
(
SELECT TOP @a*(@b-1) id FROM table1 ORDER BY id
) A
)
ORDER BY id

如果我们创建如上的存储过程,会报错误 连编译语法都通过不了 而且错误如下 :

Msg 102, Level 15, State 1, Procedure getdome, Line 5
'@a' 附近有语法错误。
Msg 102, Level 15, State 1, Procedure getdome, Line 12
'@a' 附近有语法错误。

会搞得我们一头雾水,究竟错在哪里了呢!

经过我们研究发现 top 关键字后直接跟 @a变量会报错 默认不识别 其实我们只要将上面的代码改成如下 :

CREATE PROC getdome
@a INT,
@b INT
as
SELECT TOP (@a) *
FROM table1
WHERE id >
(
SELECT ISNULL(MAX(id),0)
FROM
(
SELECT TOP (@a*(@b-1)) id FROM table1 ORDER BY id
) A
)
ORDER BY id

细心一看 我们只在 @a 处加上一对( ) 和在 @a*(@b-1) 处加上一对 ( ) 问题就解决了。

另外 注意事项
一、 id 要为主键
二、 如果没有主键,可以用临时表
三、 一对( ) 必须要加上
希望对你有帮助
TableDI
2024-07-18 广告
要将两个表格中的数据进行匹配,首先确定两个表格中都存在的共同字段,如ID、姓名或特定标识符。接着,使用数据处理工具(如Excel、SQL或Python的pandas库)来执行匹配操作。在Excel中,可以通过VLOOKUP函数或数据透视表来... 点击进入详情页
本回答由TableDI提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式