2017-08-24 74 views
1

我想知道如何做在Sybase 15在Sybase SELECT TOP創建動態查詢X

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可能會產生大量輸出)。

謝謝

回答

2

答案是:

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

有幾個選項:

  • 包裹select一對set rowcount命令(見亞當的回答爲例)
  • 構建動態查詢並通過​​運行它(請參閱下面的內容爲一個例子)

動態查詢例如:

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

它也可以工作! – Rems

0

TOP只接受一個整常數,而不是一個變量。如果您正在運行最新的(16.0 SP03),則可以使用ROWS LIMIT @v而不是TOP。

正如其他人所提到的,您可以通過動態構建查詢來解決TOP @v問題。