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]
我想做这样的事情:
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]