标题:关于在SQL中查询第N条记录
取消只看楼主
梦幻倩影
Rank: 5Rank: 5
等 级:职业侠客
威 望:8
帖 子:162
专家分:352
注 册:2016-8-19
结帖率:100%
已结贴  问题点数:20 回复次数:3 
关于在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: 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: 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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-468784-1-1.html




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

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