1

问题的标题可能不是最好的,但我找不到另一个,如果模组找到更准确的问题描述,欢迎编辑它。

我需要构建一个动态 sql 查询,它在顶部子句中具有可变参数,例如

SELECT top (value) field, field2 FROM table

现在前一个查询实际上是这个查询的子查询

SELECT @first = min(field2) FROM (SELECT top (value) field, field2 FROM table)

这意味着我需要exec(@sql)构建查询,因为 sql top 不采用动态值,但exec(@sql)据我所知,不允许我检索参数。我读过类似的案例来sp_executesql检索一个值,但我相信我无法使用顶部子句旁边的动态值构建查询。我能做些什么?

4

2 回答 2

2
declare @top int = 10

select top (@top) field, field2 from table
于 2012-05-30T13:48:15.873 回答
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
于 2012-05-30T13:50:26.287 回答