1 取中间n条记录



select top 5 * from tab where id in


(select top 10 id from tab order by id)


and


id not in


(select top 5 id from tab order by id)


可以取道6-10条记录



2 select top @para不能用的替代




今天写了个SELECT语句:SELECT TOP @ NUM * FROM XXXX 一执行,呵呵,居然错误,呵呵,到底是怎么回事情呢~?


大家都知道SELECT TOP 3 * FROM XXXX 是能执行的,但是如果要把这个3写成3*3,呵呵,那就不行了,郁闷把!


但是在用的时候,我们往往要把这个TOP 3弄成一个TOP @NUM  这样才符合我们的需要么,嘿嘿!


我于是上GOOGLE去GO了一下,


原来这里面还是有技巧的说.来看一下代码


DECLARE @SQL VARCHAR(100)

DECLARE @NUM INT 

SET @NUM = 3

SET @SQL = 'SELECT TOP '+CAST(@NUM AS VARCHAR(20))+' * FROM XXXX '

EXEC(@SQL)

--PRAINT(@SQL)



呵呵,有意思把! 其实SQL 还是执行了 SELECT TOP 3 * FROM XXXX 

原理就不用说了把,但是里面有个小技巧,有时候会发生错误,这个时候你就要用

PRAINT出来看一下SQL语句是不是正确的了,因为我们的SQL语句在字符串里,系统是检查不出来哦~!

哎!!我的文笔实在是太差了,连说话能力都有问题,估计,呵呵,还有问题的话,上GOOGLE里找去落!(喂,GOOGLE,你要给广告费了~!)


另外说明,SQL SERVER 2005是可以直接用代参数的TOP的哦,就不用这么麻烦类~~!微软的东西,哎~~!



2 读取表中的字段名及数据类型等


select   b.name,a.name ,b.length  from   systypes as a , syscolumns as b where b.xtype=a.xtype

and b.id = object_id('tableName)


3异常 Underlying input stream returned zero bytes 解决办法



http://treetree42.blogchina.com/viewdiary.15408750.html 系统环境



jdk1.5



hibernate 3.0



sql server 2000



ms jdbc driver



将一个varchar类型的字段改为text后,就出现



[Microsoft][SQLServer 2000 Driver for JDBC]Underlying input stream returned zero bytes 的异常了。



从网上搜集资料来看,由于jdbc的bug,所以不能将一个"NULL"值和一个""(empty)存储在text类型的字段中。



解决办法:可以在表结构中设置字段的默认值为" "(one char)。