在 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 问题。
我想知道如何在 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 问题。