关于SQL server 的一个查询问题

假设SQL server数据库中有表tab,条件针对同一字段
表中符合条件A的记录有a条
表中符合条件B的记录有b条,假设总是a≤b
我想实现:从表中选出前a条符合条件B的记录
1.怎么样实现?最好能给我完整的SQL语句
2.是直接用SQL查询语句,还是采用存储过程好一些?
3楼说的对 top后不能跟变量,就是能跟,a我怎么给赋值呢?

因为top 后面不能是变量。我觉得只能这样写:

declare @i int
select @i=count(*) from tab
where 条件A --求出满足条件A的条数,存在变量@i中

select identity(int,1,1) as id,* into #temp
from tab
where 条件B --取出满足B的记录插入临时表,并加序号

select * from #temp
where id<=@i --从临时表中取出所需要的结果。

这个直接用语句查询!
希望对你有帮助!

对于楼主最后补充的问题。其实我的答案中已经解决了。我给的语句中的变量 @i 其实就是你要的那个 a 值。在这里不能用top 了,我给每条记录加了序号,然后用序号<=@i 同样能取出你要的结果。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-09-25
TOP a不行吗?如果你的意思是a是个不定的数字,那么在SQL Server2005之前必须拼接查询语句,在2005之后的版本,可以使用TOP (@a)这样的表达式。
第2个回答  2009-09-25
按照一楼的做法。。
select top a *
from tab
where 条件B

最好改成存储过程,效率高而且代码易于维护
相似回答