当前位置:  开发笔记 > 编程语言 > 正文

在SQL 2005/2008中转义双引号

如何解决《在SQL2005/2008中转义双引号》经验,为你挑选了2个好方法。

我有一家最近加入的国际公司,名为"BLA"BLAHBLAH"Ltd.(双引号是该名称的一部分.)

每当用户尝试搜索此公司时,通过输入"Blah或其他影响,搜索失败并在SQL Server中出现语法错误.

我如何逃避这一点,以便搜索不会失败?

示例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

Robert C. Ba.. 7

使用参数化查询,所有引用的问题都将消失.

编辑:如果您不让他们在CONTAINS中输入多个单词,请通过删除引号来清理参数.无论多字搜索如何,通过删除引号来消毒输入可能无论如何都可以工作.



1> Robert C. Ba..:

使用参数化查询,所有引用的问题都将消失.

编辑:如果您不让他们在CONTAINS中输入多个单词,请通过删除引号来清理参数.无论多字搜索如何,通过删除引号来消毒输入可能无论如何都可以工作.



2> Marc Gravell..:

不幸的是,双引号在FTI中具有特殊含义,因此即使您对它进行参数化,FTI引擎也会将其视为短语分隔符.我不确定在FTI搜索中是否有一种简单的方法可以包含双引号.括号也是一个特殊字符,但可以用引号括起来作为查询术语 - 但不是AFAIK双引号.

更新

一点搜索表明将引号翻倍于""可能会修复它 - 值得一试.就个人而言,我会在数据库中执行此操作,因为这是一个TSQL实现细节.

同样,在传递给FTI之前'需要加倍''(完全独立于TSQL转义),


T-SQL中的字符串操作速度令人难以置信.如果查询被大量调用,他最好在调用之前修复数据库外的引号.
推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有