﻿<?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-岁月如歌-随笔分类-db</title><link>http://www.blogjava.net/midstr/category/30639.html</link><description>人生非梦</description><language>zh-cn</language><lastBuildDate>Fri, 06 Nov 2009 16:31:24 GMT</lastBuildDate><pubDate>Fri, 06 Nov 2009 16:31:24 GMT</pubDate><ttl>60</ttl><item><title>sybase数据库端分页</title><link>http://www.blogjava.net/midstr/archive/2008/10/14/234258.html</link><dc:creator>岁月如歌</dc:creator><author>岁月如歌</author><pubDate>Tue, 14 Oct 2008 08:36:00 GMT</pubDate><guid>http://www.blogjava.net/midstr/archive/2008/10/14/234258.html</guid><wfw:comment>http://www.blogjava.net/midstr/comments/234258.html</wfw:comment><comments>http://www.blogjava.net/midstr/archive/2008/10/14/234258.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/midstr/comments/commentRss/234258.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/midstr/services/trackbacks/234258.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 基本的思路有如下几种：</p>
<ol>
    <li>从12.5.3版本开始sybase支持top关键字，试着使用，但是未果（同事说sybase对top支持不好），因为不支持嵌套。使用的是如下的sql：&nbsp;&nbsp;
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">top</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">&nbsp;t1.AH,&nbsp;t1.BH&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;K_ZS..B_MS&nbsp;t1&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;t1.BH&nbsp;</span><span style="color: #808080">not</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">top</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">20</span><span style="color: #000000">&nbsp;t2.BH&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;K_ZS..B_MS&nbsp;t2)&nbsp;</span></div>
    <font style="background-color: #cce8cf">这里的是不带order by的，另外一种是带order&nbsp;by的，效率会比较高。</font>
    <li><font style="background-color: #cce8cf">在存储过程端使用set rowcount 来实现分页，没有试验。</font>
    <li><font style="background-color: #cce8cf">用存储过程，建立临时表，获取数据，然后动态sql获得临时表数据。最后从网上找到的如下的两个分页存储过程：
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">--</span><span style="color: #008080">&nbsp;按行读取</span><span style="color: #008080"><br />
    </span><span style="color: #000000"><br />
    </span><span style="color: #0000ff">CREATE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">PROCEDURE</span><span style="color: #000000">&nbsp;GetDataByLine<br />
    (<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">创建一个分页读取过程</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">8000</span><span style="color: #000000">),&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">SQL语句</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">@FirstRec</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">页起始行</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">@LastRec</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">页结束行</span><span style="color: #008080"><br />
    </span><span style="color: #000000">)<br />
    </span><span style="color: #0000ff">AS</span><span style="color: #000000"><br />
    </span><span style="color: #0000ff">DECLARE</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@dt</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">生成临时表的随机数</span><span style="color: #008080"><br />
    </span><span style="color: #0000ff">BEGIN</span><span style="color: #000000"><br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@dt</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">substring</span><span style="color: #000000">(</span><span style="color: #ff00ff">convert</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff00ff">rand</span><span style="color: #000000">()),&nbsp;</span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000">,&nbsp;</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">一个字符型的随机数</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">将搜索结果放入临时表中，表名随机生成，在'&nbsp;FROM&nbsp;'前插入'INTO&nbsp;'+随机临时表名</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">stuff</span><span style="color: #000000">(</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff00ff">charindex</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;FROM&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff00ff">upper</span><span style="color: #000000">(</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">)),&nbsp;</span><span style="font-weight: bold; color: #800000">6</span><span style="color: #000000">&nbsp;,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;INTO&nbsp;tempdb..Lining</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@dt</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;FROM&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">)<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">EXECUTE</span><span style="color: #000000">&nbsp;(</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">)<br />
    &nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">为临时表增加id号</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">ALTER&nbsp;TABLE&nbsp;tempdb..Lining</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@dt</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;ADD&nbsp;TEMPDB_ID&nbsp;numeric(10)&nbsp;IDENTITY&nbsp;PRIMARY&nbsp;KEY</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">EXECUTE</span><span style="color: #000000">&nbsp;(</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">)<br />
    &nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">计算临时表中的记录数</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">SELECT&nbsp;@SqlStr&nbsp;=&nbsp;'SELECT&nbsp;Count(*)&nbsp;From&nbsp;tempdb..Lining'&nbsp;+&nbsp;@dt</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">EXECUTE&nbsp;(@SqlStr)</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">选取记录号在起始行和结束行中间的记录</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">SELECT&nbsp;*&nbsp;FROM&nbsp;tempdb..Lining</span><span style="color: #ff0000">'</span><span style="color: #808080">+</span><span style="color: #008000">@dt</span><span style="color: #808080">+</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;WHERE&nbsp;TEMPDB_ID&nbsp;&gt;&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">convert</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">,&nbsp;</span><span style="color: #008000">@FirstRec</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;and&nbsp;TEMPDB_ID&nbsp;&lt;=&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">convert</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">,&nbsp;</span><span style="color: #008000">@LastRec</span><span style="color: #000000">)<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">EXECUTE</span><span style="color: #000000">&nbsp;(</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">)<br />
    &nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">删除临时表</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">DROP&nbsp;TABLE&nbsp;tempdb..Lining</span><span style="color: #ff0000">'</span><span style="color: #808080">+</span><span style="color: #008000">@dt</span><span style="color: #000000"><br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">EXECUTE</span><span style="color: #000000">&nbsp;(</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">)&nbsp;<br />
    &nbsp;&nbsp;<br />
    </span><span style="color: #0000ff">END</span><span style="color: #000000"><br />
    <br />
    </span><span style="color: #008080">/*</span><span style="color: #008080"><br />
    some&nbsp;comments:<br />
    1.@SqlStr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varchar(8000),&nbsp;depends&nbsp;on&nbsp;your&nbsp;page&nbsp;size<br />
    2.&nbsp;this&nbsp;is&nbsp;a&nbsp;generic&nbsp;paging&nbsp;sp,&nbsp;if&nbsp;you&nbsp;just&nbsp;want&nbsp;to&nbsp;use&nbsp;it&nbsp;for&nbsp;specific&nbsp;table,&nbsp;<br />
    &nbsp;&nbsp;&nbsp;you'd&nbsp;better&nbsp;change&nbsp;the&nbsp;'tempdb..Lining'&nbsp;to&nbsp;#Paging,&nbsp;the&nbsp;performance&nbsp;will&nbsp;be&nbsp;better<br />
    </span><span style="color: #008080">*/</span><span style="color: #000000"><br />
    <br />
    </span></div>
    </font>
    <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">--</span><span style="color: #008080">&nbsp;按页读取</span><span style="color: #008080"><br />
    </span><span style="color: #000000"><br />
    </span><span style="color: #0000ff">CREATE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">PROCEDURE</span><span style="color: #000000">&nbsp;GetDataByPage<br />
    (<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">创建一个分页读取过程</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">8000</span><span style="color: #000000">),&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">SQL语句</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">@PageSize</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">每页记录数</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">@CurrentPage</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">当前页数</span><span style="color: #008080"><br />
    </span><span style="color: #000000">)<br />
    </span><span style="color: #0000ff">AS</span><span style="color: #000000"><br />
    </span><span style="color: #0000ff">DECLARE</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@FirstRec</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">,&nbsp;</span><span style="color: #008000">@LastRec</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">,&nbsp;</span><span style="color: #008000">@dt</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">页起始行，页结束行，生成临时表的随机数</span><span style="color: #008080"><br />
    </span><span style="color: #0000ff">BEGIN</span><span style="color: #000000"><br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@FirstRec</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #008000">@CurrentPage</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">-</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@PageSize</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">计算页起始行</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@LastRec</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #008000">@CurrentPage</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@PageSize</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">计算页结束行</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@dt</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">substring</span><span style="color: #000000">(</span><span style="color: #ff00ff">convert</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">,</span><span style="color: #ff00ff">rand</span><span style="color: #000000">()),</span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">一个字符型的随机数</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">将搜索结果放入临时表中，表名随机生成，在'&nbsp;FROM&nbsp;'前插入'INTO&nbsp;'+随机临时表名</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">stuff</span><span style="color: #000000">(</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff00ff">charindex</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;FROM&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff00ff">upper</span><span style="color: #000000">(</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">)),&nbsp;</span><span style="font-weight: bold; color: #800000">6</span><span style="color: #000000">&nbsp;,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;INTO&nbsp;tempdb..Paging</span><span style="color: #ff0000">'</span><span style="color: #808080">+</span><span style="color: #008000">@dt</span><span style="color: #808080">+</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;FROM&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">)<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">EXECUTE</span><span style="color: #000000">&nbsp;(</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">)<br />
    &nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">为临时表增加id号</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">ALTER&nbsp;TABLE&nbsp;tempdb..Paging</span><span style="color: #ff0000">'</span><span style="color: #808080">+</span><span style="color: #008000">@dt</span><span style="color: #808080">+</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;ADD&nbsp;TEMPDB_ID&nbsp;numeric(10)&nbsp;IDENTITY&nbsp;PRIMARY&nbsp;KEY</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">EXECUTE</span><span style="color: #000000">&nbsp;(</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">)<br />
    &nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">计算临时表中的记录数</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">SELECT&nbsp;@SqlStr&nbsp;=&nbsp;'SELECT&nbsp;Count(*)&nbsp;From&nbsp;tempdb..Paging'+@dt</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">EXECUTE&nbsp;(@SqlStr)</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">选取记录号在起始行和结束行中间的记录</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">SELECT&nbsp;*&nbsp;FROM&nbsp;tempdb..Paging</span><span style="color: #ff0000">'</span><span style="color: #808080">+</span><span style="color: #008000">@dt</span><span style="color: #808080">+</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;WHERE&nbsp;TEMPDB_ID&nbsp;&gt;&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #808080">+</span><span style="color: #ff00ff">convert</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">,</span><span style="color: #008000">@FirstRec</span><span style="color: #000000">)</span><span style="color: #808080">+</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;and&nbsp;TEMPDB_ID&nbsp;&lt;&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #808080">+</span><span style="color: #ff00ff">convert</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">,</span><span style="color: #008000">@LastRec</span><span style="color: #000000">)<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">EXECUTE</span><span style="color: #000000">&nbsp;(</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">)<br />
    &nbsp;&nbsp;&nbsp;&nbsp;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">删除临时表</span><span style="color: #008080"><br />
    </span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">DROP&nbsp;TABLE&nbsp;tempdb..Paging</span><span style="color: #ff0000">'</span><span style="color: #808080">+</span><span style="color: #008000">@dt</span><span style="color: #000000"><br />
    &nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">EXECUTE</span><span style="color: #000000">&nbsp;(</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">)&nbsp;<br />
    &nbsp;&nbsp;<br />
    </span><span style="color: #0000ff">END</span><span style="color: #000000"><br />
    <br />
    </span><span style="color: #008080">/*</span><span style="color: #008080"><br />
    some&nbsp;comments:<br />
    1.&nbsp;@SqlStr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varchar(8000),&nbsp;depends&nbsp;on&nbsp;your&nbsp;page&nbsp;size<br />
    2.&nbsp;this&nbsp;is&nbsp;a&nbsp;generic&nbsp;paging&nbsp;sp,&nbsp;if&nbsp;you&nbsp;just&nbsp;want&nbsp;to&nbsp;use&nbsp;it&nbsp;for&nbsp;specific&nbsp;table,&nbsp;<br />
    &nbsp;&nbsp;&nbsp;you'd&nbsp;better&nbsp;change&nbsp;the&nbsp;'tempdb..Paging'&nbsp;to&nbsp;#Paging,&nbsp;the&nbsp;performance&nbsp;will&nbsp;be&nbsp;better<br />
    </span><span style="color: #008080">*/</span><span style="color: #000000"><br />
    <br />
    </span></div>
    </li>
</ol>
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">--</span><span style="color: #008080">&nbsp;清空日志</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">Dump</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Transaction</span><span style="color: #000000">&nbsp;DB_BD&nbsp;</span><span style="color: #0000ff">With</span><span style="color: #000000">&nbsp;truncate_only<br />
</span><span style="color: #0000ff">go</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">use</span><span style="color: #000000">&nbsp;DB_BD<br />
</span><span style="color: #0000ff">go</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">exists</span><span style="color: #000000">(&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;sysobjects<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;id&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">object_id</span><span style="color: #000000">(&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">PR_GET_PAGESIZE</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">and</span><span style="color: #000000">&nbsp;sysstat&nbsp;</span><span style="color: #808080">&amp;</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">15</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">4</span><span style="color: #000000">&nbsp;)<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">procedure</span><span style="color: #000000">&nbsp;PR_GET_PAGESIZE<br />
</span><span style="color: #0000ff">go</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">procedure</span><span style="color: #000000">&nbsp;PR_GET_PAGESIZE&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">8000</span><span style="color: #000000">),&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;SQL语句</span><span style="color: #008080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">@PageSize</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;每页记录数</span><span style="color: #008080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">@CurrentPage</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;当前页数</span><span style="color: #008080"><br />
</span><span style="color: #000000">)<br />
</span><span style="color: #0000ff">as</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">begin</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">declare</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@FirstRec</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;页起始行&nbsp;&nbsp;</span><span style="color: #008080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">@maxCount</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;页结束行</span><span style="color: #008080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">@dt</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;生成临时表的随机数</span><span style="color: #008080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@FirstRec</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #008000">@CurrentPage</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">-</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@PageSize</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;计算页起始行</span><span style="color: #008080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;将搜索结果放入临时表中，表名随机生成，在'&nbsp;from&nbsp;'前插入'into&nbsp;'+随机临时表名</span><span style="color: #008080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">stuff</span><span style="color: #000000">(</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff00ff">charindex</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;from&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff00ff">lower</span><span style="color: #000000">(</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">)),&nbsp;</span><span style="font-weight: bold; color: #800000">6</span><span style="color: #000000">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">,&nbsp;TEMPDB_ID&nbsp;=&nbsp;identity(11)&nbsp;into&nbsp;#temp_page&nbsp;from&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;设置结束行</span><span style="color: #008080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@maxCount</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@PageSize</span><span style="color: #808080">*</span><span style="color: #008000">@CurrentPage</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">set&nbsp;rowcount&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">convert</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">,&nbsp;</span><span style="color: #008000">@maxCount</span><span style="color: #000000">)&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;&nbsp;set&nbsp;rowcount&nbsp;0&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;选取记录号在起始行和结束行中间的记录&nbsp;&nbsp;</span><span style="color: #008080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;select&nbsp;*&nbsp;from&nbsp;#temp_page&nbsp;where&nbsp;TEMPDB_ID&nbsp;&gt;&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">convert</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">,&nbsp;</span><span style="color: #008000">@FirstRec</span><span style="color: #000000">)&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">%1!</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">execute</span><span style="color: #000000">&nbsp;(</span><span style="color: #008000">@SqlStr</span><span style="color: #000000">)<br />
&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">end</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">go</span><span style="color: #000000"><br />
<br />
sp_procxmode&nbsp;PR_GET_PAGESIZE,&nbsp;anymode<br />
</span><span style="color: #0000ff">go</span></div>
<img src ="http://www.blogjava.net/midstr/aggbug/234258.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/midstr/" target="_blank">岁月如歌</a> 2008-10-14 16:36 <a href="http://www.blogjava.net/midstr/archive/2008/10/14/234258.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>soloaris发布项目中文汉字“〇”乱码问题</title><link>http://www.blogjava.net/midstr/archive/2008/09/30/231896.html</link><dc:creator>岁月如歌</dc:creator><author>岁月如歌</author><pubDate>Tue, 30 Sep 2008 08:47:00 GMT</pubDate><guid>http://www.blogjava.net/midstr/archive/2008/09/30/231896.html</guid><wfw:comment>http://www.blogjava.net/midstr/comments/231896.html</wfw:comment><comments>http://www.blogjava.net/midstr/archive/2008/09/30/231896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/midstr/comments/commentRss/231896.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/midstr/services/trackbacks/231896.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sybase数据库的text字段（数据库服务器字符集为UTF-8），存一段html代码，在开发环境（windows+eclipse）下保存到数据库以及在页面显示都没有问题（数据库的连接串为<font style="background-color: #cce8cf">jdbc:sybase:Tds:172.16.6.114:6000/DB_LC?charset=utf8</font>）。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序发布到soloaris环境之后，在html页面中文汉字&#8220;〇&#8221;显示为乱码&#8220;？？&#8221;，咨询一位高手得到如下解答：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font style="background-color: #cce8cf">&#8220;〇&#8221;的GB系列编码是A996，非GB-2312集合所包含，GBK集合才引入；〇的unicode编码是U+3007，大约被认为是个符号，而不是汉字，U+3000附近的是全角的逗号、顿号、句号之流，而汉字(CJK基本集)是U+4E00～U+9FA5。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外一位同事给出解决方案：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font style="background-color: #cce8cf">solaris下启动TOMCAT之前，先执行一下如下操作:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LANG=zh_CN.GB18030<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; export LANG<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后再启动。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 问题解决，最后把这两句加在了catalina.sh文件的最前面，以免每次启动都得单独执行。</font><br />
</font>
<img src ="http://www.blogjava.net/midstr/aggbug/231896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/midstr/" target="_blank">岁月如歌</a> 2008-09-30 16:47 <a href="http://www.blogjava.net/midstr/archive/2008/09/30/231896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于varchar的长度和数据库字符集迁移的问题</title><link>http://www.blogjava.net/midstr/archive/2008/09/19/229976.html</link><dc:creator>岁月如歌</dc:creator><author>岁月如歌</author><pubDate>Fri, 19 Sep 2008 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/midstr/archive/2008/09/19/229976.html</guid><wfw:comment>http://www.blogjava.net/midstr/comments/229976.html</wfw:comment><comments>http://www.blogjava.net/midstr/archive/2008/09/19/229976.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/midstr/comments/commentRss/229976.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/midstr/services/trackbacks/229976.html</trackback:ping><description><![CDATA[1、原来一直在使用varchar(n)，但不是很清楚这个n的最大值是多少。查了一下<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=sybase">sybase</span>的用户手册，n的范围为<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%CA%FD%BE%DD%BF%E2"><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%CA%FD%BE%DD">数据</span>库</span>的页大小，<br />
&nbsp; &nbsp;即使用select @@maxpagesize查到的数字。
<h5>&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">除非设定string_rtruncation&nbsp;on，Adaptive&nbsp;Server将条目截断到指定列的长度而不加警告或出现错误信息。</span></div>
</h5>
2、数据库从cp850迁移到utf-8环境之后，原来的获取当事人名称的存储过程返回的结果有误，即有名称被截取的<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%CE%CA%CC%E2">问题</span>，如下<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%B4%FA%C2%EB">代码</span>：&nbsp;<br />
&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">--</span><span style="color: #008080">&nbsp;去掉末尾的顿号</span><span style="color: #008080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@MC</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">substring</span><span style="color: #000000">(</span><span style="color: #008000">@MC</span><span style="color: #000000">,&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff00ff">len</span><span style="color: #000000">(</span><span style="color: #008000">@MC</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">-</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000">)</span></div>
<br />
<br />
比如说当事人名称为&#8220;张三、李四、&#8221;，在原来的cp850库返回的结果是&#8220;张三、李四。但是升级到utf-8之后，返回的就是&#8220;张三、李&#8221;。<br />
&nbsp;&nbsp;主要是cp850字符集，一个汉字占两个<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%D7%D6%BD%DA">字节</span>，而升级到utf-8之后就占三个字节了，所以这里的减2就不正确了。<br />
&nbsp;&nbsp;执行如下的脚本
<h5>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">declare</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@MC</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">100</span><span style="color: #000000">)&nbsp;<br />
</span><span style="color: #0000ff">declare</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@length</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@MC</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">张三、李四、</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@length</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">len</span><span style="color: #000000">(</span><span style="color: #008000">@MC</span><span style="color: #000000">)<br />
</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">%1!</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #008000">@length</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@MC</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">substring</span><span style="color: #000000">(</span><span style="color: #008000">@MC</span><span style="color: #000000">,&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff00ff">len</span><span style="color: #000000">(</span><span style="color: #008000">@MC</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">-</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">len</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">、</span><span style="color: #ff0000">'</span><span style="color: #000000">))<br />
</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">%1!</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #008000">@MC</span></div>
</h5>
在cp850下，print '%1!', @length打印的长度为12，而在utf-8下则返回的是6。当然print '%1!', @MC打印的结果都是"张三、李四"<br />
&nbsp;&nbsp;所以最终把代码改为如下就正确了，<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%D7%D6%B7%FB%BC%AF">字符集</span>就不会影响结果。 <br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">--</span><span style="color: #008080">&nbsp;去掉末尾的顿号</span><span style="color: #008080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@MC</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">substring</span><span style="color: #000000">(</span><span style="color: #008000">@MC</span><span style="color: #000000">,&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff00ff">len</span><span style="color: #000000">(</span><span style="color: #008000">@MC</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">-</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">len</span><span style="color: #000000">(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">、</span><span style="color: #ff0000">'</span><span style="color: #000000">))</span></div>
<div class="t_msgfont" id="postmessage_48412">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">经常看到数据库版本限制引起的各种问题，看来有些知识需要普及一下。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />除了查手册外，再提供一种比较方便的方法，可以得到当前ASE服务器上各项限制值。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />执行如下命令即可：<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">dbcc</span><span style="color: #000000">&nbsp;traceon(</span><span style="font-weight: bold; color: #800000">3604</span><span style="color: #000000">)<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">go</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">dbcc</span><span style="color: #000000">&nbsp;serverlimits<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">go</span></div>
</div>
<img src ="http://www.blogjava.net/midstr/aggbug/229976.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/midstr/" target="_blank">岁月如歌</a> 2008-09-19 17:05 <a href="http://www.blogjava.net/midstr/archive/2008/09/19/229976.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于count函数</title><link>http://www.blogjava.net/midstr/archive/2008/08/30/225739.html</link><dc:creator>岁月如歌</dc:creator><author>岁月如歌</author><pubDate>Sat, 30 Aug 2008 06:51:00 GMT</pubDate><guid>http://www.blogjava.net/midstr/archive/2008/08/30/225739.html</guid><wfw:comment>http://www.blogjava.net/midstr/comments/225739.html</wfw:comment><comments>http://www.blogjava.net/midstr/archive/2008/08/30/225739.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/midstr/comments/commentRss/225739.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/midstr/services/trackbacks/225739.html</trackback:ping><description><![CDATA[<div class="t_msgfont" id="postmessage_45213"><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=sybase">sybase</span>的Transact-SQL用户指南是这样说的： count 得出表达式中非空值的数量，而 count(*) 得出表中的总行数。<br />
<br />
select count(LAAY) from K_ZS.. B_MS<br />
select count(<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=distinct">distinct</span> LAAY) from K_ZS.. B_MS<br />
select count(*) from K_ZS..B_MS<br />
<br />
上面的三条<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=sql">sql</span>在2.106开发库上执行结果如下：<br />
----------- <br />
&nbsp; &nbsp;&nbsp; &nbsp;61940 <br />
----------- <br />
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;353&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br />
----------- <br />
&nbsp; &nbsp;&nbsp; &nbsp;72127 <br />
<br />
&nbsp; &nbsp; 以前老以为对同一个查询条件，count(fieldname)和count(*)的结果是一样的&#8230;&#8230;所以首先要对count函数的定义清楚，<br />
从我们一般使用count函数的角度，这里最好就是用count(*) 或者count(主键)，或者是一个肯定不为null的列，不然结果就可能少了。<br />
<br />
另外从<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%D0%D4%C4%DC">性能</span>上，在K_MS.. B_MS上做实验，<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%CA%FD%BE%DD">数据</span>为1472435条（其中BH为主键）：
<div class="quote">
<h5>引用:</h5>
<blockquote>select count(*) from K_MS.. B_MS <br />
&nbsp;&nbsp;Execution Time 2. <br />
&nbsp;&nbsp;SQL <span class="t_tag" onclick="tagshow(event)" href="tag.php?name=Server">Server</span> cpu time: 200 ms.&nbsp;&nbsp;SQL Server elapsed time: 283 ms.<br />
<br />
&nbsp;&nbsp;select count(BH) from K_MS.. B_MS&nbsp;&nbsp;<br />
&nbsp;&nbsp;Execution Time 2. <br />
&nbsp;&nbsp;SQL Server cpu time: 200 ms.&nbsp;&nbsp;SQL Server elapsed time: 233 ms.</blockquote></div>
如果用表中的其他非主键字段（其中LAAY、JBFY为<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%CB%F7%D2%FD">索引</span>字段，SPCX普通字段），比如
<div class="quote">
<h5>引用:</h5>
<blockquote>select count(LAAY) from K_MS.. B_MS <br />
&nbsp;&nbsp;Execution Time 4. <br />
&nbsp;&nbsp;SQL Server cpu time: 400 ms.&nbsp;&nbsp;SQL Server elapsed time: 326 ms.<br />
<br />
&nbsp;&nbsp;select count(SPCX) from K_MS.. B_MS <br />
&nbsp;&nbsp;Execution Time 194. <br />
&nbsp;&nbsp;SQL Server cpu time: 19400 ms.&nbsp;&nbsp;SQL Server elapsed time: 28373 ms. <br />
<br />
&nbsp;&nbsp;select count(JBFY) from K_MS.. B_MS <br />
&nbsp;&nbsp;Execution Time 16. <br />
&nbsp;&nbsp;SQL Server cpu time: 1600 ms.&nbsp;&nbsp;SQL Server elapsed time: 2436 ms.</blockquote></div>
多次执行以上sql可以得出初步结论：count(主键)最快，count(*)次之，并且两者性能差异不大；但是如果count其他<br />
任何非主键字段，则速度一般会比较慢，尤其是哪些非索引字段。</div>
<img src ="http://www.blogjava.net/midstr/aggbug/225739.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/midstr/" target="_blank">岁月如歌</a> 2008-08-30 14:51 <a href="http://www.blogjava.net/midstr/archive/2008/08/30/225739.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>