我有一个使用 C++ 连接到的 Pervasive 数据库。
到目前为止我所有的查询都是参数化的,即 "SELECT USER.NAME FROM USER WHERE USER.ID = ?"
,
这工作正常。
但是在搜索查询中,我在 WHERE 子句中使用了 LIKE,然后似乎我不能使用参数和通配符 (%)。
我的查询看起来像这样 "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 表的名称,以便它们在这里有意义。)上面的代码将返回一行带有名称为
'%bob%'
的狗。 ,但我希望它返回所有名称中包含 bob 的狗。
最佳答案
为什么不在分配给参数的值中添加通配符?
所以,这意味着,您的查询看起来像
SELECT * FROM dog WHERE dog.name LIKE ?
然后,例如,您将值 '%bob%' 分配给该参数。
我看到你说你也试过这个,但它不起作用,这很奇怪。你能展示你所做的代码吗?
我还看到您在其中一个示例中的参数周围加上引号。这听起来不是一个好主意,因为这样参数将不再被识别为参数。那时,它只是一个字符串。
关于sql - 在 WHERE 子句中使用带有 LIKE 的参数化 SQL(Pervasive SQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1108081/