| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2522 人关注过本帖
标题:关于在SQL中查询第N条记录
只看楼主 加入收藏
梦幻倩影
Rank: 5Rank: 5
等 级:职业侠客
威 望:8
帖 子:162
专家分:352
注 册:2016-8-19
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
关于在SQL中查询第N条记录
declare @n int
 set @n=5
 drop table #temp
 select identity(int,1,1) as id,* into #temp from cpkhdm1 ;
 select * from #temp where id between @n and @n

上面两条语句可以,但想改成一条语句却出错:
 select top 1 [款号],[图片],[myId] from [dqgl2016].[dbo].[cpkhdm1] where [myid] not in (select top @n [myid] from [dqgl2016].[dbo].[cpkhdm1])
好象不能用变量n,改为常数又可以,为什么
 select top 1 [款号],[图片],[myId] from [dqgl2016].[dbo].[cpkhdm1] where [myid] not in (select top 5 [myid] from [dqgl2016].[dbo].[cpkhdm1])
搜索更多相关主题的帖子: identity between where 记录 
2016-09-13 21:24
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
收藏
得分:20 
不知道楼主用的SQLSERVER是什么版本的
如果是2005以上的版本,这样:select top (@n) [myid] from [dqgl2016].[dbo].[cpkhdm1]
添加上面红色的小括号即可;

如果是2000版本,可能需要用convert转换,进行字符串拼接,然后EXEC @sql(拼接后的查询语句),我这暂时没有2000环境,你测试下
例如:
declare @n int,@strSql varchar(1000)
set @strSql='select top '+convert(varchar,@p)+' * from 表名'
exec @strSql

这个问题在SQLSERVER版块提问更好。毕竟这是版块。

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2016-09-14 08:58
梦幻倩影
Rank: 5Rank: 5
等 级:职业侠客
威 望:8
帖 子:162
专家分:352
注 册:2016-8-19
收藏
得分:0 
还是经验重要啊,昨晚自己弄了一晚上都搞不定 ,原来如此简单,在sql2008中只需加个( )

另外在sql2000中刚才测试了declare @n int,@strSql varchar(1000)
set @strSql='select top '+convert(varchar,@p)+' * from 表名'
exec @strSql
会出错,提示找不到存储过程@strSql
要改为exec (@strSql)才OK
2016-09-14 10:05
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
收藏
得分:0 
恭喜楼主!

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2016-09-14 10:07
梦幻倩影
Rank: 5Rank: 5
等 级:职业侠客
威 望:8
帖 子:162
专家分:352
注 册:2016-8-19
收藏
得分:0 
查询第N条记录 sql2008正确语句:
declare @n int
set @n=5
select top 1 [款号],[图片],[myId] from [dqgl2016].[dbo].[cpkhdm1] where [myid] not in (select top (@n-1) [myid] from [dqgl2016].[dbo].[cpkhdm1])
2016-09-14 10:12
梦幻倩影
Rank: 5Rank: 5
等 级:职业侠客
威 望:8
帖 子:162
专家分:352
注 册:2016-8-19
收藏
得分:0 
定义了一个存储过程,然后,查 首记录,前一条,后一条,最后一条  只要控制改变参数 n(全局变量) 全搞定
CREATE PROCEDURE check1
@n int
AS
BEGIN
  SET NOCOUNT ON;
  declare @i int
 select @i =count(*) from cpkhdm1
    if @i<@n
       begin
         set  @n=@i
       end   
   select top 1 款号,图片,myId from dbo.cpkhdm1 where myid not in (select top (@n-1) myid from dbo.cpkhdm1);
   SET NOCOUNT Off;
 END

2016-09-14 16:51
快速回复:关于在SQL中查询第N条记录
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017625 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved