SELECT TOP与参数的语法不正确

OrE*_*lse 3 sql vb.net asp.net sql-server-2005 sqlparameter

我曾经有过这个

Dt = MyMod.GetDataTable("SELECT TOP " & QuestionsPerCats(i) & " * From Questions WHERE CategoriesID ='" & Cats(i) & "' ORDER BY NEWID()")
Run Code Online (Sandbox Code Playgroud)

但现在我决定使用sqlparameters之类的

Dim cmd As New SqlCommand("SELECT TOP @QuestionsPerCats * From Questions WHERE CategoriesID = @CategoriesID ORDER BY NEWID()", conn)
Dim sqlParam As SqlParameter = Nothing
sqlParam = cmd.Parameters.Add("@QuestionsPerCats", SqlDbType.SmallInt)
sqlParam.Value = QuestionsPerCats(i)
sqlParam = cmd.Parameters.Add("@CategoriesID", SqlDbType.SmallInt)
sqlParam.Value = Cats(i)
Run Code Online (Sandbox Code Playgroud)

不幸的是"渲染"之类的

SELECT TOP @QuestionsPerCats * From Questions WHERE CategoriesID = @CategoriesID ORDER BY NEWID()
Run Code Online (Sandbox Code Playgroud)

并返回以下错误

Incorrect syntax near '@QuestionsPerCats'.
Run Code Online (Sandbox Code Playgroud)

那我在这里做错了什么?

Cad*_*oux 12

尝试:

SELECT TOP (@QuestionsPerCats) *
FROM Questions
WHERE CategoriesID = @CategoriesID
ORDER BY NEWID()
Run Code Online (Sandbox Code Playgroud)

(SQL Server 2005及更高版本)