为 TOP 或 FETCH 子句行计数参数提供的行数必须是整数

  • 本文关键字:整数 参数 子句 FETCH TOP sql-server
  • 更新时间 :
  • 英文 :


我对此查询有问题

SELECT SUM (A.SumTopMarks) FROM (SELECT
T.section_id,
SumTopMarks = SUM(S.marks)
FROM
dbo.MocktestDetails AS T
CROSS APPLY (
SELECT TOP (T.total_section_question)
*
FROM
dbo.online_test_marks AS O
WHERE
T.section_id = O.section_id AND t.branch_id = o.branch_id AND t.test_id = o.test_id 
AND t.test_id=1 AND o.test_id=1 AND o.student_id=1
--AND o.branch_id =@branch_id AND t.branch_id=@branch_id
ORDER BY
O.marks DESC
) AS S
GROUP BY
T.section_id) AS A

我知道为什么显示它,因为T.total_section_question列,它在我的表中被声明为 nvarchar。

假设我想运行此查询,

SELECT  TOP 1 * FROM dbo.tblName

它没有显示任何语法错误,但是如果像这样重新运行,

DECLARE @n NVARCHAR(3)= '10'
SELECT  TOP (@n) * FROM dbo.adm_BusinessArea

它显示一个错误,如何修复此语法。 我能投这个吗?但是铸造给了我一个语法错误

试试这个:

DECLARE @n int= 10
SELECT  TOP (@n) * FROM dbo.adm_BusinessArea 

或者在 varchar 数据类型的情况下:

DECLARE @n varchar(10) = '10'
SELECT  TOP (cast(@n as int)) * FROM dbo.adm_BusinessArea 

以下是说明和示例:

https://learn.microsoft.com/en-us/sql/t-sql/queries/top-transact-sql?view=sql-server-ver15

最新更新