declare @top int
set @top = 5
select top @top * from tablename
有可能吗?
或者对这种逻辑有什么想法(我不想使用动态查询)?
发布于 2009-12-18 18:38:26
是的,在SQL Server2005中,可以在top
子句中使用变量。
select top (@top) * from tablename
发布于 2009-12-18 18:38:13
SQL Server2005实际上允许我们使用变量、表达式或语句来参数化TOP子句。所以你可以这样做:
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
发布于 2009-12-18 18:56:05
在2005及更高版本中,您可以这样做,因为在此线程中有几个回复。
不太为人所知的是,您也可以通过使用SET ROWCOUNT在2k中实现这一点。
-- 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
请注意,如果您忘记了末尾的设置ROWCOUNT 0,则限制仍然存在。你最终会发现很难找到bug :-)
https://stackoverflow.com/questions/1927450
复制相似问题