Неверный синтаксис для SELECT TOP с параметром - PullRequest
3 голосов
/ 07 апреля 2011

Раньше у меня был этот

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

, но теперь я решил использовать 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)

, который, к сожалению, "рендерит" как

SELECT TOP @QuestionsPerCats * From Questions WHERE CategoriesID = @CategoriesID ORDER BY NEWID()

и возвращает следующую ошибку

Incorrect syntax near '@QuestionsPerCats'.

Так что я здесь не так делаю?

Ответы [ 3 ]

11 голосов
/ 07 апреля 2011

Попробуйте:

SELECT TOP (@QuestionsPerCats) *
FROM Questions
WHERE CategoriesID = @CategoriesID
ORDER BY NEWID()

(SQL Server 2005 и выше)

0 голосов
/ 07 апреля 2011

Попробуйте изменить это на:

cmd.Parameters.Add("@QuestionsPerCats", SqlDbType.SmallInt)
cmd.Parameters("@QuestionsPerCats").Value = QuestionsPerCats(i)


cmd.Parameters.Add("@CategoriesID", SqlDbType.SmallInt)
cmd.Parameters("@CategoriesID").Value = Cats(i)

Метод, который вы используете для добавления параметров в команду, немного странный. Я подозреваю, что это может быть причиной вашей ошибки.

0 голосов
/ 07 апреля 2011

Включить @QuestionsPerCats в (), как определено в этой ссылке

SELECT TOP (@QuestionsPerCats) * 
From Questions 
WHERE CategoriesID = @CategoriesID ORDER BY NEWID()
...