我最近添加了一家国际公司,名为“BLA "BLAHBLAH"Ltd.(双引号是名称的一部分。)
每当用户尝试搜索这家公司时,通过输入“Blah,或其他影响,搜索失败并在 SQL 服务器中出现语法错误。
我怎样才能避免这种情况,这样搜索就不会失败?
示例 SQL:
SELECT c.companyID, c.companyName, c.dateAdded, count(cm.maxID) as NumDirect
FROM RussoundGeneral.dbo.Company c
LEFT JOIN RussoundGeneral.dbo.CompanyMax cm
ON (cm.companyId = c.companyId and cm.maxID is not null)
WHERE CONTAINS ( companyName, '"BLAH*' )
GROUP BY c.companyID, c.companyName, c.dateAdded
ORDER BY c.companyName ASC
最佳答案
不幸的是,双引号在 FTI 中有特殊含义,因此即使您对其进行参数化,FTI 引擎也会将其视为短语定界符。我不确定是否有一种简单的方法可以在 FTI 搜索中包含双引号。方括号也是一个特殊字符,但可以用引号括起以视为查询词 - 但不是 AFAIK 双引号。
更新
一些搜索表明将引号加倍到 ""可能会解决它 - 值得一试。就个人而言,我会在数据库中执行此操作,因为这是一个 TSQL 实现细节。
同样,在传递给 FTI 之前,' 需要加倍为 ''(完全独立于 TSQL 转义),
关于c# - 在 SQL 2005/2008 中转义双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/387198/