WHERE 절 (Pervasive SQL)과 같은 매개 변수화 된 SQL 사용
-
12-09-2019 - |
문제
C ++를 사용하는 데 연결하는 퍼베이시브 데이터베이스가 있습니다. 지금까지의 모든 쿼리는 매개 변수화되었습니다 "SELECT USER.NAME FROM USER WHERE USER.ID = ?"
그리고 그것은 잘 작동합니다. 그러나 검색 쿼리에서 나는 WHERE 절에서 사용하면 매개 변수와 와일드 숯 (%)을 사용할 수없는 것 같습니다.
내 쿼리는 이런 식으로 보입니다 "SELECT * FROM DOG WHERE DOG.NAME LIKE '%?%'"
그리고 매개 변수 주위에 두 개의 '가 있으므로, 이것은 실패하기 때문에, 그것은 그들의 이름으로? -mark를 가진 개를 검색했습니다. SQL Server에서 이것은 아마도 문자열을 연결하여 해결 될 것입니다. "SELECT * FROM DOG WHERE DOG.NAME LIKE '%' + ? + '%'"
, 그러나 이것은 Pervasive의 잘못된 구문입니다 (이 페이지의 하단 참조 : http://ww1.pervasive.com/library/docs/psql/950/sqlref/sqlref-04-55.html).
또한 매개 변수 자체에 %신호를 추가하려고했지만 작동하지 않는 것 같습니다.
누구든지 이것에 대한 해결책을 아는 사람이 있습니까?
edit1 :일부 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
a _CommandPtr
, 그리고 m_pAdoRecordset
a _RecordsetPtr
. 이 예제에서 SQL 테이블의 이름을 변경하여 여기에서 감지를 만듭니다.)
위의 코드는 이름이있는 개와 함께 행을 반환합니다. '%bob%'
, 그러나 나는 밥이있는 모든 개를 그들의 이름으로 돌려주고 싶습니다.
해결책
매개 변수에 할당하는 값에 와일드 카드를 추가하지 않는 이유는 무엇입니까?
따라서 이것은 귀하의 쿼리가 모양을 의미합니다
SELECT * FROM dog WHERE dog.name LIKE ?
그런 다음 예를 들어이 매개 변수에 값 '%bob%'를 할당합니다. 나는 당신이 이것을 시도했다고 말하는 것을 봅니다. 그러나 그것은 작동하지 않으며, 그것은 매우 이상합니다. 당신이 한 일의 코드를 보여줄 수 있습니까?
또한 예제 중 하나에 매개 변수 주위에 인용문을 넣는 것을 알 수 있습니다. 이것은 좋은 생각처럼 들리지 않습니다. 그 이후로 매개 변수는 더 이상 매개 변수로 인식되지 않습니다. 그 시점에서 그것은 단지 끈 일뿐입니다.