我在处理以下构造时遇到问题:
SELECT *
FROM X
INNER JOIN
(
SELECT TOP (X.IntegerAmount) *
FROM Y
) AS Z ON X.ID = Z.X_ID
这个问题有解决方案吗?
答案 0 :(得分:3)
您无法使用其他表中的值
来参数化TOP您可以使用排名功能
SELECT *
FROM X
INNER JOIN
(
SELECT ROW_NUMBER() OVER (ORDER BY SomeVal) as rn, *
FROM Y
) AS Z ON X.ID = Z.X_ID
WHERE
Z.rn <= X.IntegerAmount)
或者您必须使用@topparameter
将派生查询设为UDF注意:无论如何你需要一个ORDER BY
可能有更好的方法来做你真正想要的事情:这是你实际问的答案,这可能不是同一件事......
答案 1 :(得分:0)
编辑:
我想我明白了,试试这个:
DECLARE @i as INT = 10
SET @SQL + 'SELECT * FROM X INNER JOIN
(
SELECT TOP
' +CAST(@i AS NVARCHAR(10)) + ' *
FROM Y
) AS Z
ON X.ID = Z.X_ID'
EXEC sp_executesql @SQL