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

Create Dynamic Query in Sybase SELECT TOP X

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

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

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

我尝试使用 TOP (@DEPTH),与 sql 服务器相同,但它认为这是一个错误。

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

谢谢

答案是:

DECLARE @DEPTH INT
SET @DEPTH = 8    
SET ROWCOUNT @DEPTH
SELECT * FROM Table
SET ROWCOUNT 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

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

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