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