【问题标题】:Create Dynamic Query in Sybase SELECT TOP X在 Sybase 中创建动态查询 SELECT TOP X
【发布时间】:2018-02-02 22:50:12
【问题描述】:

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

谢谢

【问题讨论】:

    标签: variables sybase sybase-ase15


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      有几个选项:

      • 将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
      

      【讨论】:

        【解决方案3】:

        答案是:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-27
          • 2013-06-07
          • 1970-01-01
          • 2011-01-03
          • 1970-01-01
          • 1970-01-01
          • 2015-08-16
          • 1970-01-01
          相关资源
          最近更新 更多