从EXEC中检索值(@sql)

时间:2012-05-30 13:46:03

标签: sql sql-server

问题的标题可能不是最好的,但我找不到另一个,如果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子句旁边的动态值来构建查询。我该怎么办?

2 个答案:

答案 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