Использование параметризованного SQL с предложением LIKE в WHERE (повсеместный SQL)

StackOverflow https://stackoverflow.com/questions/1108081

Вопрос

У меня есть обширная база данных, к которой я подключаюсь с помощью C ++.Все мои запросы до сих пор параметризованы, т.е "SELECT USER.NAME FROM USER WHERE USER.ID = ?", и это прекрасно работает.Но в поисковом запросе я использую LIKE в предложении WHERE , и тогда кажется, что я не могу использовать параметры и подстановочные знаки (%).

Мой запрос выглядит примерно так "SELECT * FROM DOG WHERE DOG.NAME LIKE '%?%'" и поскольку вокруг параметра есть два ' ?-mark , это не удается, выполняется поиск собак с ?-mark в их названии.В SQL Server это, вероятно, было бы решено путем объединения строки, подобной "SELECT * FROM DOG WHERE DOG.NAME LIKE '%' + ? + '%'", но это недопустимый синтаксис в Pervasive (см. Внизу этой страницы: http://ww1.pervasive.com/library/docs/psql/950/sqlref/sqlref-04-55.html).

Я также пытался добавить знаки % к самому параметру, но это, похоже, тоже не работает.

Кто-нибудь знает решение этой проблемы?

РЕДАКТИРОВАТЬ 1: Какой-нибудь пример кода на C ++:

CString sqlCommand = "SELECT * FROM DOG WHERE DOG.NAME LIKE ?;";
m_pAdoCommand->CommandText = _bstr_t(sqlCommand);
m_pAdoCommand->Parameters->Append( m_pAdoCommand->CreateParameter("p0", adVarChar, adParamInput, 25, _bstr_t("'%bob%'")) );
m_pAdoRecordset = m_pAdoCommand->Execute(NULL,NULL,adCmdText);

(m_pAdoCommand является _CommandPtr, и m_pAdoRecordset является _RecordsetPtr.Я изменил название таблиц SQL в этом примере, чтобы они создавали sens здесь.)

Приведенный выше код вернет строку с собакой, у которой есть имя '%bob%', но я бы хотел, чтобы он вернул всех собак, в имени которых есть bob.

Это было полезно?

Решение

Почему бы вам не добавить подстановочный знак к значению , которое вы присваиваете параметру ?

Итак, это означает, что ваш запрос выглядит следующим образом

SELECT * FROM dog WHERE dog.name LIKE ?

А затем вы присваиваете значение '%bob%' этому параметру, например.Я вижу, вы говорите, что тоже пробовали это, но это не работает, что очень странно.Можете ли вы показать код того , что вы сделали тогда ?

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top