CREATE PROCEDURE Mypage
(
@mepagesize int, --每页显示记录数
@mepageint int, --分页条显示个数
@thispage int, --当前页编号 @msrsall int output, --总记录数
@mspagecount int output --总页数
)
AS
declare @pagecount int --分页总数
declare @rsall int --总记录数
declare @top int --提当前段数据
------------------------------------------------------------------------------------
select @rsall=count(*) from userinfo
------------------------------------------------------------------------------------
if @rsall >0 --有数据
begin
set @top=@mepagesize*@thispage
--select top @top * from userinfo where id not in(select @top * from userinfo)
if @rsall % @mepagesize=0
begin
set @pagecount=@rsall / @mepagesize
end
else
begin
set @pagecount=@rsall / @mepagesize+1
end
end
else --没数据
set @msrsall=0
set @mspagecount=0
GO上面的注释那一行通不过。
请高手结合我的这个dll文件写一个存储过程http://www.cartoonb2b.cn/mayi.dll,这是我写好的dll
http://www.cartoonb2b.cn/News_class.aspx?classid=13这是分页后的效果。
另外后面一个top 少一个top
--功能概述:动态sql语句基本语法
1 :普通SQL语句可以用Exec执行 eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名 declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确 3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中? declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;public partial class Default3 : System.Web.UI.Page
{
MAYI.Mpage Mypp = new MAYI.Mpage();
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
int x = 20;
int y = 10;
SqlConnection cn = new SqlConnection("server=.;uid=sa;pwd=sa;database=cartoonb2b");
cn.Open();
SqlCommand cmd = new SqlCommand("Mypage", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@mepagesize", SqlDbType.Int);
cmd.Parameters["@mepagesize"].Value = x;
cmd.Parameters.Add("@mepageint", SqlDbType.Int);
cmd.Parameters["@mepageint"].Value = y;
cmd.Parameters.Add("@thispage", SqlDbType.Int);
cmd.Parameters["@thispage"].Value = 1;
if (Request.QueryString["pp"]!=null)
{
cmd.Parameters["@thispage"].Value = Convert.ToInt32(Request.QueryString["pp"]);
}
cmd.Parameters.Add("@msrsall", SqlDbType.Int);
cmd.Parameters.Add("@mspagecount", SqlDbType.Int); cmd.Parameters["@msrsall"].Direction = ParameterDirection.Output;
cmd.Parameters["@mspagecount"].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
sda.Fill(ds);
GridView1.DataSource = ds.Tables[0].DefaultView;
GridView1.DataBind(); Literal1.Text = Mypp.MyPage(500, x, y, null, null,"pp", null, null, null);
cn.Close();
}
}
}CREATE PROCEDURE Mypage
(
@mepagesize int, --每页显示记录数
@mepageint int, --分页条显示个数
@thispage int, --当前页编号 @msrsall int output, --总记录数
@mspagecount int output --总页数
)
AS
declare @pagecount int --分页总数
declare @rsall int --总记录数
declare @top int --提当前段数据
------------------------------------------------------------------------------------
select @rsall=count(*) from userinfo
------------------------------------------------------------------------------------
if @rsall >0 --有数据
begin
set @top=@mepagesize*@thispage
--select top @mepagesize * from userinfo where id not in(select top @top * from userinfo)
select top 10 id,username,userpass from userinfo
if @rsall % @mepagesize=0
begin
set @pagecount=@rsall / @mepagesize
end
else
begin
set @pagecount=@rsall / @mepagesize+1
end
end
else --没数据
set @msrsall=0
set @mspagecount=0
GO我把所有的源码发出来,请结合我刚才发的个dll文件,看一下咋整,现在只能提到前10个,别的地方都没事。
CREATE PROCEDURE Mypage
(
@mepagesize int, --每页显示记录数
@mepageint int, --分页条显示个数
@thispage int, --当前页编号 @msrsall int output, --总记录数
@mspagecount int output --总页数
)
AS
declare @pagecount int --分页总数
declare @rsall int --总记录数
declare @top int --提当前段数据
declare @nxx varchar(500)
set @nxx='select top ' + @mepagesize + ' * from userinfo where id not in(select top '+ @top +' * from userinfo)'
------------------------------------------------------------------------------------
select @rsall=count(*) from userinfo
------------------------------------------------------------------------------------
if @rsall >0 --有数据
begin
set @top=@mepagesize*@thispage
exec(@nxx)
--select top 10 id,username,userpass from userinfo
if @rsall % @mepagesize=0
begin
set @pagecount=@rsall / @mepagesize
end
else
begin
set @pagecount=@rsall / @mepagesize+1
end
end
else --没数据
set @msrsall=0
set @mspagecount=0
GO貌似这样SQL里没有报错,但执行net时提示top varchar转为int是出错
"set @nxx='select top ' + @mepagesize + ' * from userinfo where id not in(select top '+ @top +' * from userinfo)'"
移到
set @top=@mepagesize*@thispage
后面
CREATE PROCEDURE Mypage
(
@mepagesize int, --每页显示记录数
@mepageint int, --分页条显示个数
@thispage int, --当前页编号 @msrsall int output, --总记录数
@mspagecount int output --总页数
)
AS
declare @pagecount int --分页总数
declare @rsall int --总记录数
declare @top int --提当前段数据
declare @nxx varchar(500)
------------------------------------------------------------------------------------
select @rsall=count(*) from userinfo
------------------------------------------------------------------------------------
if @rsall >0 --有数据
begin
set @top=@mepagesize*@thispage
set @nxx='select top ' + @mepagesize + ' * from userinfo where id not in(select top '+ @top +' * from userinfo)'
exec(@nxx)
if @rsall % @mepagesize=0
begin
set @pagecount=@rsall / @mepagesize
end
else
begin
set @pagecount=@rsall / @mepagesize+1
end
end
else --没数据
set @msrsall=0
set @mspagecount=0
GO这样也不行耶。
改为
set @nxx='select top ' + cast(@mepagesize as varchar(10)) + ' * from userinfo where id not in (select top '+ cast(@top as varchar(10)) +' * from userinfo)'
试试
set @nxx='select top ' + @mepagesize + ' * from userinfo where id not in(select top '+ @top +' * from userinfo)'
create table #t (a varchar(10))
insert #t
select 12 union
select 14 union
select 4 union
select 5 union
select 3 declare @i int,@sql varchar(1000)
select @i=2,@sql='select top '+cast( @i as varchar(10))+' * from #t '
exec(@sql)drop table #t
CREATE PROCEDURE Mypage
(
@mepagesize int, --每页显示记录数
@mepageint int, --分页条显示个数
@thispage int, --当前页编号 @msrsall int output, --总记录数
@mspagecount int output --总页数
)
AS
declare @pagecount int --分页总数
declare @rsall int --总记录数
declare @top int --提当前段数据
declare @sql varchar(200)
------------------------------------------------------------------------------------
select @rsall=count(*) from userinfo
------------------------------------------------------------------------------------
if @rsall >0 --有数据
begin
set @top=@mepagesize*@thispage
--set @sql='select top ' + cast(@mepagesize as varchar(100)) + ' * from userinfo where id not in(select top '+ cast(@top as varchar(100)) +' * from userinfo)'
set @sql='select top ' + cast(@mepagesize as varchar(100)) + ' * from userinfo'
exec(@sql)
if @rsall % @mepagesize=0
begin
set @pagecount=@rsall / @mepagesize
end
else
begin
set @pagecount=@rsall / @mepagesize+1
end
end
else --没数据
begin
set @msrsall=0
set @mspagecount=0
end
set @msrsall=@rsall --总信息数
set @mspagecount=@pagecount --分页总数
GO
注释的那个sql通不过
set @sql='select top ' + cast(@mepagesize as varchar(100)) + ' * from userinfo where id not in(select top '+ cast(@top as varchar(100)) +' * from userinfo)'这个子查询咋写呢。
总提示这CREATE PROCEDURE Mypage
(
@mepagesize int, --每页显示记录数
@mepageint int, --分页条显示个数
@thispage int, --当前页编号 @msrsall int output, --总记录数
@mspagecount int output --总页数
)
AS
declare @pagecount int --分页总数
declare @rsall int --总记录数
declare @top int --提当前段数据
declare @sql varchar(200)
------------------------------------------------------------------------------------
select @rsall=count(*) from userinfo
------------------------------------------------------------------------------------
if @rsall >0 --有数据
begin
set @top=@mepagesize*@thispage
set @sql='select top ' + cast(@mepagesize as varchar(100)) + ' * from userinfo where id not in(select top '+ cast(@top as varchar(100)) +' * from userinfo)'
--set @sql='select top ' + cast(@mepagesize as varchar(100)) + ' * from userinfo'
exec(@sql)
if @rsall % @mepagesize=0
begin
set @pagecount=@rsall / @mepagesize
end
else
begin
set @pagecount=@rsall / @mepagesize+1
end
end
else --没数据
begin
set @msrsall=0
set @mspagecount=0
end
set @msrsall=@rsall --总信息数
set @mspagecount=@pagecount --分页总数
GO