SQL top [参数]

SQL top [parameter]

我想做这样的事情:

declare @a int
set @a = 10

select top @a * from tbl

(基本上 @a 将来自系统设置 table)

我可以在没有动态 sql 字符串的情况下执行此操作吗?

您可以使用 row_number() :

select a.*
from (select t.*, row_number() over (order by ?) as seq
      from tbl t
     ) t
where seq <= @a;

但是,如果您在 TOP 子句周围加上括号 (),这也有效:

declare @a int
set @a = 10

select top (@a) t.* 
from tbl t;

注意 :如果不使用 ORDER BY 子句,这将是随机行 return.

您的代码(几乎)按规定运行。至少在 SQL Server 2016 下这是有效的并且返回了一个结果:

DECLARE @a int
SET @a = 10

SELECT TOP (@a) [Per_ID]  
FROM [tbl_Personen]