1

我想知道如何在 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 可能会产生大量输出)。

谢谢

4

3 回答 3

2

答案是:

DECLARE @DEPTH INT
SET @DEPTH = 8    
SET ROWCOUNT @DEPTH
SELECT * FROM Table
SET ROWCOUNT 0
于 2017-08-25T05:40:17.520 回答
0

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

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

于 2017-08-26T14:02:40.773 回答
-1

有几个选项:

  • 将其包装select在一对set rowcount命令中(例如,请参阅亚当的答案)
  • 构建一个动态查询并通过它运行execute()(参见下面的示例)

动态查询示例:

declare @depth int, @query varchar(16384)
select  @depth = 8
select  @query = 'select top '+convert(varchar,@depth)+' * from table'
execute(@query)
go
于 2017-08-25T12:13:48.257 回答