问题的标题可能不是最好的,但我找不到另一个,如果mod找到更准确的问题描述,欢迎编辑它。
我需要构建一个dymanic sql查询,它在top子句中有可变参数,如
SELECT top (value) field, field2 FROM table
现在前者查询它实际上是来自此查询的子查询
SELECT @first = min(field2) FROM (SELECT top (value) field, field2 FROM table)
这意味着我需要exec(@sql)
来构建查询,因为sql top不会获取动态值,但{I} exec(@sql)
并不允许我根据我的知识检索参数。我在类似的情况下读过使用sp_executesql
来检索一个值,但是我认为我不能使用top子句旁边的动态值来构建查询。我该怎么办?
答案 0 :(得分:2)
declare @top int = 10
select top (@top) field, field2 from table
答案 1 :(得分:2)
如果您使用的是sql server 2005或更高版本,则可以使用变量来执行动态顶部,如果您仍然使用2000,则可以使用带有变量的SET ROWCOUNT
2005及以上语法
DECLARE @RowCount int -- =25 -- sql server 2008 allows to assign when declaring
SELECT @RowCount = 25
SELECT TOP (@RowCount) * FROM table1
2000语法
DECLARE @RowCount int
SELECT @RowCount = 25
SET ROWCOUNT @RowCount
SELECT * FROM table1
SET ROWCOUNT 0 -- make sure to set back to 0 otherwise
-- queries below will return 25 rows