海妖 发表于 2015-1-16 22:15:34

MYSQL编程:sqlserver 存储历程分页(按多前提排序)...

MySQL采用双重授权(DualLicensed),它们是GPL和MySQLAB制定的商业许可协议。cs页面挪用代码:
复制代码代码以下:
 publicintTotalPage=0;
publicintPageCurrent=1;
publicintPageSize=25;
publicintRowsCount=0;
stringuserid,username;
publicDataTabledt=newDataTable();
publicstringpath,userwelcome;
publicstringopt,cid;
protectedvoidPage_Load(objectsender,EventArgse)
{
if(!IsPostBack)
{
if(Request.Params["page"]==nullRequest.Params["page"].ToString().Equals(""))
PageCurrent=1;
else
PageCurrent=int.Parse(Request.Params["page"].ToString());
this.getPage(outTotalPage,outRowsCount,PageSize,PageCurrent);
}
}


//挪用存储历程的函数

privatevoidgetPage(outinttotalPage,outintrowsCount,intpageSize,intcurrentPage)
{
SqlParameter[]parameters={
newSqlParameter("@TotalPage",SqlDbType.Int,4),
newSqlParameter("@RowsCount",SqlDbType.Int,4),
newSqlParameter("@PageSize",SqlDbType.Int,4),
newSqlParameter("@CurrentPage",SqlDbType.Int,4),
newSqlParameter("@SelectFields",SqlDbType.NVarChar,700),
newSqlParameter("@IdField",SqlDbType.NVarChar,50),
newSqlParameter("@OrderField",SqlDbType.NVarChar,200),
newSqlParameter("@OrderType",SqlDbType.NVarChar,2),
newSqlParameter("@TableName",SqlDbType.NVarChar,300),
newSqlParameter("@strWhere",SqlDbType.NVarChar,300),
};
parameters.Direction=ParameterDirection.Output;
parameters.Direction=ParameterDirection.Output;
parameters.Value=pageSize;
parameters.Value=currentPage;
parameters.Value="a.RLId,a.companyName,a.webSite,a.isRL,a.ordernum,a.isrl,a.userid";
parameters.Value="a.RLId";

parameters.Value="a.isrlasc,a.orderNum";
parameters.Value="1";
parameters.Value="qiYeRenlinga";
parameters.Value="1=1";//

DataSetds=Wm23Abc.DBUtility.DbHelperSQL.RunProcedure("getRecordByPage",parameters,"dt");
dt=ds.Tables;
totalPage=int.Parse(parameters.Value.ToString());
rowsCount=int.Parse(parameters.Value.ToString());
}


.aspx页面代码:

<tableid="SXFSTable"style="width:100%;"class="table">
<tr><td><b>公司称号</b></td><td><b>公司网址</b></td><td><b>认领形态</b></td></tr>
<%for(inti=0;i<dt.Rows.Count;i++)
{
%>
<tr>
<td><%=dt.Rows["companyName"].ToString()%>排序值:<%=dt.Rows["ordernum"].ToString()%></td>
<td><%=dt.Rows["webSite"].ToString()%>
是不是认领:<%=dt.Rows["userid"].ToString()%></td>
<td><%=dt.Rows["isRL"].ToString().Equals("0")?"<ahref="javascript:;"onclick="renLing(event,"+dt.Rows["RLId"].ToString()+");">认领该企业</a>":"<fontcolor="red">该企业已被认领</font>"%></td>
</tr>
<%
}
%>
</table>
</div>
<divstyle="margin-left:auto;margin-right:auto;width:70%;text-align:left;font-size:9pt;">
第<%=PageCurrent%>页共<%=RowsCount%>条共<%=TotalPage%>页
<%if(PageCurrent!=1)
{
%>
<ahref="test.aspx">首 页</a>
<ahref="test.aspx?page=<%=PageCurrent-1%>">上一页</a>

<%
}
if(PageCurrent!=TotalPage)
{
%>
<ahref="test.aspx?page=<%=PageCurrent+1%>">下一页</a>
<ahref="test.aspx?page=<%=TotalPage%>">末 页</a>
<%
}
%>
</div>


存储历程代码:
复制代码代码以下:
CREATEproc.
@TotalPageintoutput,--总页数
@RowsCountintoutput,--总条数
@PageSizeint,--每页几数据
@CurrentPageint,--以后页数
@SelectFieldsnvarchar(1000),--select语句可是不包括select
@IdFieldnvarchar(50),--主键列
@OrderFieldnvarchar(50),--排序字段,假如是多个字段,除最初一个字段外,前面都要加排序前提(asc/desc),不包括orderby,最初一个排序字段不必加排序前提
@OrderTypenvarchar(4),--1升序,0降序
@TableNamenvarchar(200),--表名
@strWherenvarchar(300)--前提
As
Begin
declare@RecordCountfloat
declare@PageNumint--分页根据数
Declare@Comparenvarchar(50)--对照字段辨别min大概max
Declare@Compare1nvarchar(2)--年夜于号“>”大概小于号"<“
Declare@OrderSqlnvarchar(10)--排序字段
declare@Sqlnvarchar(4000)
Declare@TemSqlnvarchar(1000)
Declare@nRdint
declare@afterRowsint
declare@tempTableNamenvarchar(10)

if(@OrderType=1)
Begin
set@OrderSql=asc
End
Else
Begin
set@OrderSql=desc
End


if(isnull(@strWhere,))
Set@strWhere=@strWhere
if(@strWhere=)
Set@strWhere=1=1

Set@TemSql=Select@RecordCount=Count(1)from+@TableName+where+@strWhere
execsp_executesql@TemSql,N@RecordCountfloatoutput,@RecordCountoutput
Set@RowsCount=@RecordCount
Set@TotalPage=ceiling(@RecordCount/@PageSize)
if(@CurrentPage>@TotalPage)
Set@CurrentPage=@TotalPage
if(@CurrentPage<1)
Set@CurrentPage=1
if(@PageSize<1)
Set@PageSize=1
print(@RecordCount)




if(@CurrentPage=1)
Begin
setRowcount@PageSize
set@Sql=select+@SelectFields+from+@TableName+where+@strWhere+orderby+@OrderField+

+@OrderSql+,+@IdField+asc
--print(@Sql)
execsp_executeSql@Sql

End
elseif(@CurrentPage=@TotalPage)
begin
set@afterRows=@RowsCount-(@CurrentPage-1)*@PageSize
setRowCount@afterRows
if(@OrderType=1)
begin
set@OrderField=REPLACE(@OrderField,asc,lai512343975)//这里用变量将asc和desc交换,哈哈,太神了
set@OrderField=REPLACE(@OrderField,desc,asc)
set@OrderField=REPLACE(@OrderField,lai512343975,desc)
set@Sql=select+@SelectFields+from+@TableName+where+@strWhere+orderby+@OrderField+desc+,+@IdField+asc

end
else
begin
set@OrderField=REPLACE(@OrderField,desc,lai512343975)
set@OrderField=REPLACE(@OrderField,asc,desc)
set@OrderField=REPLACE(@OrderField,lai512343975,asc)
set@Sql=select+@SelectFields+from+@TableName+where+@strWhere+orderby+@OrderField+asc+,+@IdField+asc
print(@Sql)
end
--print(@Sql)
execsp_executeSql@Sql
end
else
Begin
set@nRd=@PageSize*(@CurrentPage-1)
print(@nRd)


setRowCount@PageSize
set@Sql=select+@SelectFields+from+@TableName+where+@strWhere+and+@IdField+notin(selecttop+cast(@nRdasnvarchar(10))++@IdField+from+@TableName+where+@strWhere+orderby+@OrderField++@OrderSql+,+@IdField+asc)+orderby+@OrderField++@OrderSql+,+@IdField+asc
execsp_executeSql@Sql
--Print(@sql)
End
end
GO




无疑希望员工得到系统、有深度的培训,显然MySQL在这一点上还做得很不够。

愤怒的大鸟 发表于 2015-1-19 06:18:02

外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。

老尸 发表于 2015-1-25 07:13:24

很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。

飘灵儿 发表于 2015-2-2 17:14:30

可以动态传入参数,省却了动态SQL的拼写。

活着的死人 发表于 2015-2-8 03:00:37

至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。

只想知道 发表于 2015-2-24 04:32:20

相信各位对数据库和怎么样学习数据库都有一些经验和看法,也会有人走了一些弯路总结出自己的经验来,希望大家能把各自的看法和经验拿出来分享,给别人一份帮助,给自己一份快乐

柔情似水 发表于 2015-3-7 10:54:28

但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。

莫相离 发表于 2015-3-15 02:40:59

比如日志传送、比如集群。。。

小妖女 发表于 2015-3-21 17:13:23

两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书
页: [1]
查看完整版本: MYSQL编程:sqlserver 存储历程分页(按多前提排序)...