在Sybase SELECT TOP X中创建动态查询

时间:2017-08-24 22:49:31

标签: variables sybase sybase-ase15

我想知道如何在Sybase 15中执行以下操作。

DECLARE @DEPTH INT
SET @DEPTH = 8    
SELECT TOP @DEPTH  * FROM Table

它给我以下错误: 错误(102)' @ DEPTH'附近的语法不正确。

我尝试使用TOP(@DEPTH),与sql server相同,但它将其识别为错误。

错误(14216)功能' TOP'未找到。如果这是SQLJ函数或SQL函数,请使用sp_help检查对象是否存在(sp_help可能会产生大量输出)。

谢谢

3 个答案:

答案 0 :(得分:2)

答案是:

DECLARE @DEPTH INT
SET @DEPTH = 8    
SET ROWCOUNT @DEPTH
SELECT * FROM Table
SET ROWCOUNT 0

答案 1 :(得分:0)

有几种选择:

  • select包裹在一对set rowcount命令中(参见Adam的答案)
  • 构建动态查询并通过execute()运行(请参阅下面的示例)

动态查询示例:

declare @depth int, @query varchar(16384)
select  @depth = 8
select  @query = 'select top '+convert(varchar,@depth)+' * from table'
execute(@query)
go

答案 2 :(得分:0)

TOP只接受整数常量,而不是变量。如果您运行的是最新版本(16.0 SP03),则可以使用ROWS LIMIT @v而不是TOP。

正如其他人所提到的,您可以通过动态构建查询来解决TOP @v问题。