5544992 发表于 2016-10-30 04:32:49

sql server tips 2

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不能用的替代
http://www.cnblogs.com/lsmwell/archive/2005/06/18/176571.aspx
今天写了个SELECT语句:SELECT TOP @ NUM *FROM XXXX 一执行,呵呵,居然错误,呵呵,到底是怎么回事情呢~?
大家都知道SELECT TOP 3 *FROM XXXX 是能执行的,但是如果要把这个3写成3*3,呵呵,那就不行了,郁闷把!
但是在用的时候,我们往往要把这个TOP 3弄成一个TOP @NUM 这样才符合我们的需要么,嘿嘿!
我于是上GOOGLE去GO了一下,
原来这里面还是有技巧的说.来看一下代码
DECLARE @SQLVARCHAR(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 SERVER2005是可以直接用代参数的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后,就出现
Underlying input stream returned zero bytes 的异常了。
从网上搜集资料来看,由于jdbc的bug,所以不能将一个"NULL"值和一个""(empty)存储在text类型的字段中。
解决办法:可以在表结构中设置字段的默认值为" "(one char)。
页: [1]
查看完整版本: sql server tips 2