首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在SQL Server的select语句中使用变量with TOP,而不将其动态化

在SQL Server的select语句中使用变量with TOP,而不将其动态化
EN

Stack Overflow用户
提问于 2009-12-18 18:35:18
回答 3查看 104.2K关注 0票数 234
代码语言:javascript
复制
declare @top  int
set @top = 5
select top @top * from tablename

有可能吗?

或者对这种逻辑有什么想法(我不想使用动态查询)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-18 18:38:26

是的,在SQL Server2005中,可以在top子句中使用变量。

代码语言:javascript
复制
select top (@top) * from tablename
票数 434
EN

Stack Overflow用户

发布于 2009-12-18 18:38:13

SQL Server2005实际上允许我们使用变量、表达式或语句来参数化TOP子句。所以你可以这样做:

代码语言:javascript
复制
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 

Source

票数 45
EN

Stack Overflow用户

发布于 2009-12-18 18:56:05

在2005及更高版本中,您可以这样做,因为在此线程中有几个回复。

不太为人所知的是,您也可以通过使用SET ROWCOUNT在2k中实现这一点。

代码语言:javascript
复制
  -- 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 :-)

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1927450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档