SQL Server не возвращает результаты с определенными словами в параметризованном запросе - PullRequest
1 голос
/ 21 ноября 2011

Я использую Параметризованный запрос для поиска определенного слова, выбранного из окна поиска, но определенные слова создают проблему.Одним из них является слово «pad».

Это база данных рецептов, которую я использую, и в ней есть рецепт, называемый «pad Thai»;если я передам слово «тайский» в параметр запроса, этот рецепт будет возвращен в порядке.Если я передаю слово «pad», запрос выполняется около 10 секунд и не возвращает никаких записей.

Я подозревал, что «pad» является зарезервированным ключевым словом, поэтому я пробовал другие ключевые слова;единственный, который я обнаружил, вызывая ту же самую проблему, до сих пор - "proc".

Любые идеи, в чем проблема и, что более важно, как я могу обойти ее.

1 Ответ

0 голосов
/ 23 декабря 2011

Поскольку вы не предоставите подробных сведений о том, как работает код, я собираюсь сделать несколько диких предположений, что под «параметризованным запросом» вы подразумеваете хранимую процедуру и что вы вызываете хранимую процедуру с помощью всего ее текста ( не лучшая практика, но я не знаю, каковы ограничения программного обеспечения, которое вы используете).

В любом случае, причина pad или proc может вызвать проблемы в том, что вы явно не говорите серверу, что это строки. По причинам, которые я никогда не понимал, TSQL позволит вам передавать строки из одного слова в (n) параметры процедур varchar. Простой пример будет:

EXEC sp_helpdb master

Строго говоря, это должно привести к синтаксической ошибке. Правильный синтаксис:

EXEC sp_helpdb 'master'

Но, похоже, разработчики говорили: «Эй, это меньше печатает, это здорово для производительности!» и так запрос работает.

Теперь, если ваша процедура вызывается так:

EXEC p_find_recipe thai

Это передаст строку «тайский», и все будет работать, как ожидалось. Однако при использовании зарезервированного слова, такого как proc или file или table и т. Д. ..., это может вызвать синтаксическую ошибку, и вам необходимо обязательно заключить в кавычки значение, чтобы оно работало.

Все это говорит: - синтаксическая ошибка должна быть возвращена сразу, она не должна занимать 10 секунд - AFAIK "pad" не является ключевым словом с повторным знаком

Так что я не уверен, что вышеизложенное относится к вашей проблеме, и поэтому вполне возможно, что я просто потратил 10 минут на то, чтобы ничего не печатать =)

В любом случае, вам, вероятно, нужно будет дать дополнительные сведения о том, какой язык вы используете, что вы имеете в виду при параметризованном запросе (возможно, вы имеете в виду синтаксис SELECT * FROM table WHERE field = ?, в котором после заполняются символы?) желательно с некоторым примером кода.

...