Use variable with TOP in select statement in SQL Server without making it dynamic
本问题已经有最佳答案,请猛点这里访问。
1 2 3 | DECLARE @top INT SET @top = 5 SELECT top @top * FROM tablename |
可能吗?
或任何想法这样的逻辑(我不想使用动态查询)?
是的,在SQL Server 2005中,可以在
1 | SELECT top (@top) * FROM tablename |
SQL Server 2005实际上允许我们使用变量,表达式或语句来参数化TOP子句。 所以你可以这样做:
1 2 3 4 5 | SELECT TOP (@foo) a FROM TABLE ORDER BY a SELECT TOP (SELECT COUNT(*) FROM somewhere ELSE) a FROM TABLE ORDER BY a SELECT TOP (@foo + 5 * 4 / 2) a FROM TABLE ORDER BY a |
资源
在2005年及以后,你可以这样做,因为这个帖子中有几个回复。
鲜为人知的是,你可以通过使用SET ROWCOUNT在2k中实现这一点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | -- Works in all versions SELECT TOP 10 -- Does not work on 2000 SELECT TOP (10) SELECT TOP (@ROWS) -- Works in both 2ooo and 2oo5 SET ROWCOUNT @MAX SELECT * FROM ... SET ROWCOUNT 0 |
注意,如果你最后忘记了SET ROWCOUNT 0,那么限制仍然存在..你最终会很难找到错误:-)