在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错误:-)