﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-曾科's Blog-文章分类-SQL</title><link>http://www.blogjava.net/zengke/category/23878.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 07 Jul 2007 07:03:36 GMT</lastBuildDate><pubDate>Sat, 07 Jul 2007 07:03:36 GMT</pubDate><ttl>60</ttl><item><title>分页procedure</title><link>http://www.blogjava.net/zengke/articles/128478.html</link><dc:creator>曾科</dc:creator><author>曾科</author><pubDate>Fri, 06 Jul 2007 00:54:00 GMT</pubDate><guid>http://www.blogjava.net/zengke/articles/128478.html</guid><wfw:comment>http://www.blogjava.net/zengke/comments/128478.html</wfw:comment><comments>http://www.blogjava.net/zengke/articles/128478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zengke/comments/commentRss/128478.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zengke/services/trackbacks/128478.html</trackback:ping><description><![CDATA[CREATE PROCEDURE dbo.GetPagingRecord<br>&nbsp;&nbsp;&nbsp; ( <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @tablename varchar(100),--表名或视图表 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @fieldlist varchar(4000)='*',--欲选择字段列表 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @orderfield varchar(100),--排序字段 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @keyfield varchar(100),--主键 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @pageindex int,--页号,从1开始 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @pagesize int=20,--页尺寸 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @strwhere varchar(4000),--条件 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @ordertype varchar(1)='1'--排序,1,降序,0,升序 <br>&nbsp;&nbsp;&nbsp; ) <br>AS
<p style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; SET NOCOUNT ON <br>&nbsp;&nbsp;&nbsp; declare @sqlstr varchar(6000) <br>&nbsp;&nbsp;&nbsp; declare @orderstr varchar(100) <br>&nbsp;&nbsp;&nbsp; if(@keyfield=@orderfield)<br>&nbsp;&nbsp;&nbsp; begin<br>&nbsp;set @orderstr = ''<br>&nbsp;&nbsp;&nbsp; end<br>&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp; begin<br>&nbsp;set @orderstr = ','+@keyfield+' asc'<br>&nbsp;&nbsp;&nbsp; end<br>&nbsp;&nbsp;&nbsp; if @pageindex&lt;=0 <br>&nbsp;set @pageindex=1<br>&nbsp;&nbsp;&nbsp; --处理SQL中危险字符,并且将条件处理成易嵌入的形式 <br>&nbsp;&nbsp;&nbsp; set @strwhere=replace(@strwhere,'''','''''') <br>&nbsp;&nbsp;&nbsp; set @strwhere=replace(@strwhere,'--','') <br>&nbsp;&nbsp;&nbsp; set @strwhere=replace(@strwhere,';','') <br>&nbsp;&nbsp;&nbsp; set @sqlstr='declare @CurPageNum int;' <br>&nbsp;&nbsp;&nbsp; set @sqlstr=@sqlstr+'declare @nextpagenum int;' <br>&nbsp;&nbsp;&nbsp; set @sqlstr=@sqlstr+'set @curpagenum='+cast(@PageIndex-1 as varchar)+'*'+cast(@Pagesize as varchar)+';' <br>&nbsp;&nbsp;&nbsp; set @sqlstr=@sqlstr+'set @nextpagenum='+cast(@PageIndex as varchar)+'*'+cast(@Pagesize as varchar)+';' <br>&nbsp;&nbsp;&nbsp; set @sqlstr=@sqlstr+'declare @sqlstr varchar(6000);' <br>&nbsp;&nbsp;&nbsp; if @ordertype='1'<br>&nbsp;&nbsp;&nbsp; begin <br>&nbsp;&nbsp;&nbsp; set @sqlstr=@sqlstr+'set @sqlstr=''select <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#102;&#105;&#101;&#108;&#100;&#108;&#105;&#115;&#116;&#43;&#39;"><font color=#000080>'+@fieldlist+'</font></a> from ( select top ''+cast(@nextpagenum as varchar)+'' * from&nbsp; <br>&nbsp;<br><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#116;&#97;&#98;&#108;&#101;&#110;&#97;&#109;&#101;&#43;&#39;"><font color=#000080>'+@tablename+'</font></a>&nbsp; where 1=1 <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#115;&#116;&#114;&#119;&#104;&#101;&#114;&#101;&#43;&#39;"><font color=#000080>'+@strwhere+'</font></a> order by <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#111;&#114;&#100;&#101;&#114;&#102;&#105;&#101;&#108;&#100;&#43;&#39;"><font color=#000080>'+@orderfield+'</font></a> desc' + @orderstr+') as a where 1=1 and <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#107;&#101;&#121;&#102;&#105;&#101;&#108;&#100;&#43;&#39;"><font color=#000080>'+@keyfield+'</font></a> not in (&nbsp; <br>&nbsp;<br>select top ''+cast(@curpagenum as varchar)+'' <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#107;&#101;&#121;&#102;&#105;&#101;&#108;&#100;&#43;&#39;"><font color=#000080>'+@keyfield+'</font></a> from <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#116;&#97;&#98;&#108;&#101;&#110;&#97;&#109;&#101;&#43;&#39;"><font color=#000080>'+@tablename+'</font></a> where 1=1 <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#115;&#116;&#114;&#119;&#104;&#101;&#114;&#101;&#43;&#39;"><font color=#000080>'+@strwhere+'</font></a>&nbsp; <br>&nbsp;<br>order by <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#111;&#114;&#100;&#101;&#114;&#102;&#105;&#101;&#108;&#100;"><font color=#000080>'+@orderfield</font></a> +' desc'+ @orderstr +') order by ' + @orderfield +' desc'';' <br>&nbsp;&nbsp;&nbsp; end <br>&nbsp;&nbsp;&nbsp; else <br>&nbsp;&nbsp;&nbsp; begin <br>&nbsp;&nbsp;&nbsp; set @sqlstr=@sqlstr+'set @sqlstr=''select <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#102;&#105;&#101;&#108;&#100;&#108;&#105;&#115;&#116;&#43;&#39;"><font color=#000080>'+@fieldlist+'</font></a> from ( select top ''+cast(@nextpagenum as varchar)+'' * from&nbsp; <br>&nbsp;<br><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#116;&#97;&#98;&#108;&#101;&#110;&#97;&#109;&#101;&#43;&#39;"><font color=#000080>'+@tablename+'</font></a>&nbsp; where 1=1 <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#115;&#116;&#114;&#119;&#104;&#101;&#114;&#101;&#43;&#39;"><font color=#000080>'+@strwhere+'</font></a> order by <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#111;&#114;&#100;&#101;&#114;&#102;&#105;&#101;&#108;&#100;&#43;&#39;"><font color=#000080>'+@orderfield+'</font></a> asc' + @orderstr+' ) as a where 1=1 and <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#107;&#101;&#121;&#102;&#105;&#101;&#108;&#100;&#43;&#39;"><font color=#000080>'+@keyfield+'</font></a> not in (&nbsp; <br>&nbsp;<br>select top ''+cast(@curpagenum as varchar)+'' <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#107;&#101;&#121;&#102;&#105;&#101;&#108;&#100;&#43;&#39;"><font color=#000080>'+@keyfield+'</font></a> from <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#116;&#97;&#98;&#108;&#101;&#110;&#97;&#109;&#101;&#43;&#39;"><font color=#000080>'+@tablename+'</font></a> where 1=1 <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#115;&#116;&#114;&#119;&#104;&#101;&#114;&#101;&#43;&#39;"><font color=#000080>'+@strwhere+'</font></a>&nbsp; <br>&nbsp;<br>order by <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#111;&#114;&#100;&#101;&#114;&#102;&#105;&#101;&#108;&#100;"><font color=#000080>'+@orderfield</font></a> +' asc' + @orderstr+') order by <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#39;&#43;&#64;&#111;&#114;&#100;&#101;&#114;&#102;&#105;&#101;&#108;&#100;"><font color=#000080>'+@orderfield</font></a> +' asc'';' <br>&nbsp;&nbsp;&nbsp; end <br>&nbsp;&nbsp;&nbsp; set @sqlstr=@sqlstr+'execute( @sqlstr)' <br>&nbsp;&nbsp;&nbsp; print @sqlstr <br>execute(@sqlstr)<br>GO<br></p>
<img src ="http://www.blogjava.net/zengke/aggbug/128478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zengke/" target="_blank">曾科</a> 2007-07-06 08:54 <a href="http://www.blogjava.net/zengke/articles/128478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>