在SQL Server的select语句中使用TOPvariables而不使其dynamic化
declare @top int set @top = 5 select top @top * from tablename
可能吗?
或者任何想法这样的逻辑(我不想使用dynamic查询)?
是的,在SQL Server 2005中,可以在top
子句中使用一个variables。
select top (@top) * from tablename
SQL Server 2005实际上允许我们使用variables,expression式或语句来参数化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
资源
在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
请注意,如果您在最后忘记了SET ROWCOUNT 0,则限制仍然存在。您将很难find错误:-)