Недопустимое использование параметра NEXT в операторе FETCH.

Я не мастер SQL, поэтому надеюсь, что это не слишком большая проблема. :) Вот мой SQL:

query = "SELECT id, email, firstName, lastName " +
        "FROM [WarehouseUser] " +
        "WHERE email LIKE '%' + @Filter + '%' OR FirstName LIKE '%' + @Filter + '%' OR LastName LIKE '%' + @Filter + '%'" +
        "ORDER BY " + "DESC" +
        "OFFSET @Offset ROWS " +
        "FETCH NEXT @Length ROWS ONLY;";

Когда это выполняется, я получаю следующую ошибку:

System.Data.SqlClient.SqlException: «Неверный синтаксис рядом с @Offset». Недопустимое использование параметра NEXT в операторе FETCH.'

Что я делаю не так?


person Jonathan    schedule 25.08.2017    source источник
comment
(1) Какую базу данных вы используете? Пожалуйста, пометьте соответствующим образом. (2) Как выглядит запрос после подстановки переменных?   -  person Gordon Linoff    schedule 25.08.2017
comment
что содержит sort? Напечатайте где-нибудь окончательную строку, отображаемую sql, попробуйте запустить ее напрямую и посмотреть, в чем проблема... Я думаю, должно быть на sort или на числах смещения, длины (и перед порядком у вас нет пробела.   -  person Aristos    schedule 25.08.2017
comment
это могут быть + и " после sort, которые испортились   -  person Alam    schedule 25.08.2017
comment
Это точно синтаксическая ошибка, которую вы получите, если sort будет пустым. Из этого я делаю предварительный вывод, что sort пусто.   -  person Jeroen Mostert    schedule 25.08.2017
comment
Спасибо @JeroenMostert и @Aristos за ваши комментарии, я новичок в SQL и ценю помощь. sort был пуст, но я все еще получаю ту же ошибку, когда устанавливаю его на ASC или DESC.   -  person Jonathan    schedule 25.08.2017
comment
@ Алам, я удалил их, и ничего не изменилось. Обновление кода в вопросе.   -  person Jonathan    schedule 25.08.2017
comment
Это потому, что ORDER BY DESC тоже недопустимо. Вам не хватает столбца для ORDER BY (ORDER BY WidgetCount DESC). При построении динамического SQL распечатайте его перед выполнением, а затем используйте SSMS или функцию сервера Visual Studio, чтобы проверить, является ли оператор синтаксически допустимым. Если повезет, вы сразу же получите волнистые линии, говорящие вам, что это не так. (Кроме того, базовые практические знания SQL настоятельно рекомендуются при динамическом объединении операторов — вы должны, по крайней мере, знать, как ORDER BY работает.)   -  person Jeroen Mostert    schedule 25.08.2017


Ответы (1)


Вы можете увидеть проблему, когда вы выводите значение своей переменной и смотрите на SQL-запрос, который она пишет. Здесь нужен пробел после "DESC". Как 2_. В настоящее время у вас DESCOFFSET вместо DESC OFFSET. Смотрите здесь:

http://rextester.com/live/RKRXM8567

person TheEsnSiavashi    schedule 25.08.2017